erp_app 3.0.6 → 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,14 +9,15 @@ module ErpApp
9
9
  array << category.to_tree_hash(:only => [], :methods => [{:id => :categoryId}], :icon_cls => 'icon-index')
10
10
  end
11
11
  end
12
+ tree_array.sort_by!{|hash| [hash[:text]]}
12
13
  render :json => tree_array
13
14
  end
14
15
 
15
16
  def setup
16
17
  category_id = params[:category_id]
17
18
  configuration = ::Configuration.find(params[:id])
18
-
19
- render :json => {:success => true, :configurationItemTypes => configuration.item_types.by_category(Category.find(category_id)).collect(&:to_js_hash)}
19
+
20
+ render :json => {:success => true, :configurationItemTypes => configuration.item_types.by_category(Category.find(category_id)).collect(&:to_js_hash).sort_by{|hash| [hash[:internalIdentifier]]}}
20
21
  end
21
22
 
22
23
  def load
@@ -2,7 +2,7 @@
2
2
  <html xmlns="http://www.w3.org/1999/xhtml">
3
3
  <head>
4
4
  <title>CompassAE Mobile</title>
5
- <%=include_sencha_touch :debug => true%>
5
+ <%=include_sencha_touch :debug => (Rails.env != 'production')%>
6
6
  <%=static_javascript_include_tag('erp_app/utility.js')%>
7
7
  <%=static_javascript_include_tag('erp_app/mobile/mobile_base.js')%>
8
8
  <%#=setup_js_authentication(@user, @desktop)%>
@@ -20,7 +20,7 @@ module ErpApp
20
20
  def include_extjs(opt={})
21
21
  resources = ''
22
22
 
23
- if opt[:debug] or Rails.env != 'production'
23
+ if opt[:debug]
24
24
  resources << static_javascript_include_tag("extjs/ext-all-debug.js")
25
25
  else
26
26
  resources << static_javascript_include_tag("extjs/ext-all.js")
@@ -2,7 +2,7 @@ module ErpApp
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 0
5
- TINY = 6
5
+ TINY = 7
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].compact.join('.')
8
8
  end
@@ -11,7 +11,7 @@ module ErpApp
11
11
 
12
12
  uuid = Digest::SHA1.hexdigest(Time.now.to_s + rand(10000).to_s)
13
13
 
14
- raw "<div id=\"#{uuid}\">Loading ...<script type=\"text/javascript\">Compass.ErpApp.Widgets.setup('#{uuid}', '#{name}', '#{action}', #{params}, true);</script></div>"
14
+ raw "<div id=\"#{uuid}\" class='compass_ae-widget'>Loading ...<script type=\"text/javascript\">Compass.ErpApp.Widgets.setup('#{uuid}', '#{name}', '#{action}', #{params}, true);</script></div>"
15
15
  end
16
16
 
17
17
  def build_widget_url(action,id=nil,params={})
@@ -49,9 +49,9 @@ module ErpApp
49
49
  widget_params
50
50
  end
51
51
 
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
52
+ end #WidgetHelper
53
+ end #Helpers
54
+ end #ActionView
55
+ end #Railties
56
+ end #Widgets
57
+ end #ErpApp
@@ -1,24 +1,37 @@
1
- if($){
2
- $(document).ready(function () {
3
- Compass.ErpApp.JQuerySupport.setupHtmlReplace();
4
- });
1
+ if ($) {
2
+ $(document).ready(function () {
3
+ Compass.ErpApp.JQuerySupport.setupHtmlReplace();
4
+ });
5
5
 
6
- Ext.ns("Compass.ErpApp.JQuerySupport");
6
+ Ext.ns("Compass.ErpApp.JQuerySupport");
7
7
 
8
- Compass.ErpApp.JQuerySupport.setupHtmlReplace = function(){
9
- jQuery('body').unbind('ajaxSuccess').bind('ajaxSuccess', Compass.ErpApp.JQuerySupport.handleHtmlUpdateResponse);
10
- };
8
+ Compass.ErpApp.JQuerySupport.setupHtmlReplace = function () {
9
+ jQuery('body').unbind('ajaxSuccess').bind('ajaxSuccess', Compass.ErpApp.JQuerySupport.handleHtmlUpdateResponse);
10
+ };
11
11
 
12
- Compass.ErpApp.JQuerySupport.handleHtmlUpdateResponse = function(e, xhr, settings){
13
- try{
14
- var responseData = jQuery.parseJSON(xhr.responseText);
15
- var element = document.getElementById(responseData.htmlId);
16
- element.innerHTML = responseData.html;
17
- Compass.ErpApp.Utility.evaluateScriptTags(element);
18
- }
19
- catch(err){
20
- //handle errors silently
12
+ Compass.ErpApp.JQuerySupport.handleHtmlUpdateResponse = function (e, xhr, settings) {
13
+ if(Compass.ErpApp.JQuerySupport.IsJsonString(xhr.responseText)){
14
+ var responseData = jQuery.parseJSON(xhr.responseText);
15
+ if (!Ext.isEmpty(responseData) && !Ext.isEmpty(responseData.htmlId)) {
16
+ var updateDiv = $('#' + responseData.htmlId);
17
+ try {
18
+ updateDiv.closest('div.compass_ae-widget').unmask();
19
+ }
20
+ catch (ex) {
21
+ //messy catch for no update div
22
+ }
23
+ updateDiv.get(0).innerHTML = responseData.html;
24
+ Compass.ErpApp.Utility.evaluateScriptTags(updateDiv.get(0));
25
+ }
26
+ }
27
+ };
28
+
29
+ Compass.ErpApp.JQuerySupport.IsJsonString = function (str) {
30
+ try {
31
+ JSON.parse(str);
32
+ } catch (e) {
33
+ return false;
34
+ }
35
+ return true;
21
36
  }
22
-
23
- };
24
37
  }
@@ -36,12 +36,12 @@ Ext.define("Compass.ErpApp.Shared.DynamicEditableGrid",{
36
36
  var store = Ext.create('Ext.data.Store', {
37
37
  model: ((config.editable) ? config.model : undefined),
38
38
  fields:config['fields'],
39
- autoLoad: true,
39
+ remoteSort:config['remoteSort'],
40
40
  autoSync: true,
41
41
  pageSize: config['pageSize'],
42
42
  proxy: config.proxy,
43
43
  storeId: config['storeId'],
44
- autoLoad: true
44
+ autoLoad: false
45
45
  });
46
46
 
47
47
  this.store = store;
@@ -54,18 +54,18 @@ Ext.define("Compass.ErpApp.Shared.DynamicEditableGrid",{
54
54
  emptyMsg: config['emptyMsg']
55
55
  });
56
56
  }
57
-
57
+
58
58
  this.callParent(arguments);
59
59
  },
60
60
 
61
61
  constructor : function(config) {
62
- this.editing = Ext.create('Ext.grid.plugin.RowEditing', {
63
- clicksToMoveEditor: 1
64
- });
65
-
66
- var plugins = [];
67
- var tbar = {};
68
62
  if(config['editable']){
63
+ var tbar = {};
64
+ var plugins = [];
65
+ this.editing = Ext.create('Ext.grid.plugin.RowEditing', {
66
+ clicksToMoveEditor: 1
67
+ });
68
+
69
69
  var Model = Ext.define(config.model,{
70
70
  extend:'Ext.data.Model',
71
71
  fields:config.fields,
@@ -97,16 +97,20 @@ Ext.define("Compass.ErpApp.Shared.DynamicEditableGrid",{
97
97
  }
98
98
  }]
99
99
  };
100
+
101
+ config = Ext.apply({
102
+ plugins:plugins,
103
+ tbar:tbar
104
+ }, config);
100
105
  }
101
106
 
102
107
  config = Ext.apply({
103
108
  layout:'fit',
104
109
  frame: false,
105
110
  autoScroll:true,
106
- loadMask:true,
107
- plugins:plugins,
108
- tbar:tbar
111
+ loadMask:true
109
112
  }, config);
113
+
110
114
  this.callParent([config]);
111
115
  }
112
116
  });
@@ -15,6 +15,7 @@ Ext.define("Compass.ErpApp.Shared.DynamicEditableGridLoaderPanel",{
15
15
  editable:config['editable'],
16
16
  url:config['dataUrl'],
17
17
  page:config['page'],
18
+ remoteSort:config['remoteSort'],
18
19
  pageSize:config['pageSize'],
19
20
  displayMsg:config['displayMsg'],
20
21
  emptyMsg:config['emptyMsg'],
@@ -28,8 +29,7 @@ Ext.define("Compass.ErpApp.Shared.DynamicEditableGridLoaderPanel",{
28
29
  listeners: config.grid_listeners,
29
30
  storeId: config['storeId']
30
31
  });
31
- self.getLayout().setActiveItem(0);
32
-
32
+ self.down('shared_dynamiceditablegrid').getStore().load();
33
33
  }
34
34
  else{
35
35
  var message = response.message;
@@ -46,14 +46,12 @@ Ext.define("Compass.ErpApp.Shared.DynamicEditableGridLoaderPanel",{
46
46
  },
47
47
 
48
48
  onRender: function() {
49
- Compass.ErpApp.Shared.DynamicEditableGridLoaderPanel.superclass.onRender.apply(this, arguments);
49
+ this.callParent(arguments);
50
50
  this.setupGrid();
51
51
  },
52
52
 
53
53
  constructor : function(config) {
54
- config = Ext.apply({
55
- layout:'card'
56
- }, config);
54
+ config = Ext.apply({layout:'card'}, config);
57
55
  this.callParent([config]);
58
56
  }
59
57
  });
@@ -46,6 +46,16 @@ Compass.ErpApp.Utility.handleFormFailure = function(action){
46
46
  }
47
47
  };
48
48
 
49
+ Compass.ErpApp.Utility.randomString = function(length) {
50
+ var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
51
+ var randomString = '';
52
+ for (var i=0; i<length; i++) {
53
+ var randomNumber = Math.floor(Math.random() * chars.length);
54
+ randomString += chars.substring(randomNumber,randomNumber+1);
55
+ }
56
+ return randomString
57
+ };
58
+
49
59
  Compass.ErpApp.Utility.roundNumber = function(num) {
50
60
  var twoDPString = "0.00";
51
61
  if(!Compass.ErpApp.Utility.isBlank(num) && !isNaN(num)){
@@ -128,13 +138,7 @@ Compass.ErpApp.Utility.addCommas = function(nStr)
128
138
  };
129
139
 
130
140
  Compass.ErpApp.Utility.isBlank = function(value) {
131
- var result = false;
132
-
133
- if(value === 'undefined' || value === undefined || value === null || value === '' || value === ' '){
134
- result = true;
135
- }
136
-
137
- return result;
141
+ return Ext.isEmpty(value);
138
142
  };
139
143
 
140
144
  Compass.ErpApp.Utility.removeDublicates = function(arrayName) {
@@ -10,7 +10,7 @@ Compass.ErpApp.Widgets = {
10
10
  method: 'POST',
11
11
  params:widgetParams,
12
12
  success: function(response) {
13
- Ext.get(uuid).dom.innerHTML = response.responseText;
13
+ Ext.get(uuid).dom.innerHTML = response.responseText;
14
14
  Compass.ErpApp.Utility.evaluateScriptTags(Ext.get(uuid).dom);
15
15
  Compass.ErpApp.JQuerySupport.setupHtmlReplace();
16
16
  if(addToLoaded)
@@ -22,7 +22,7 @@ Compass.ErpApp.Widgets = {
22
22
  });
23
23
  },
24
24
  failure: function(response) {
25
- alert('Error loading widget '+name);
25
+ jQuery('#'+uuid).unmask();
26
26
  }
27
27
  });
28
28
  },
@@ -41,6 +41,42 @@ Compass.ErpApp.Widgets = {
41
41
  });
42
42
  },
43
43
 
44
+ setupAjaxNavigation : function(css_class, home_url){
45
+ $.address.value('nav?url=' + home_url);
46
+
47
+ var bindCss = 'a.'+css_class;
48
+ var anchor = null;
49
+ jQuery(bindCss).bind('click', function(){
50
+ anchor = $(this);
51
+ var href = anchor.attr('href');
52
+ $.address.value('nav?url=' + href + '&key='+Compass.ErpApp.Utility.randomString(10));
53
+ anchor.closest('div.compass_ae-widget').mask("Loading....");
54
+
55
+ $.ajax({
56
+ url: href,
57
+ success: Compass.ErpApp.JQuerySupport.handleHtmlUpdateResponse
58
+ });
59
+
60
+ return false;
61
+ });
62
+
63
+ $.address.change(function(event) {
64
+ try{
65
+ if(!Ext.isEmpty(event.parameters.url)){
66
+ $.ajax({
67
+ url: event.parameters.url,
68
+ success: Compass.ErpApp.JQuerySupport.handleHtmlUpdateResponse
69
+ });
70
+ }
71
+ }
72
+ catch(exception){
73
+ if(console){
74
+ console.log(exception);
75
+ }
76
+ }
77
+ });
78
+ },
79
+
44
80
  LoadedWidgets : [],
45
81
 
46
82
  AvailableWidgets : []
@@ -0,0 +1,32 @@
1
+ /*
2
+ * jQuery Address Plugin v1.3.2
3
+ * http://www.asual.com/jquery/address/
4
+ *
5
+ * Copyright (c) 2009-2010 Rostislav Hristov
6
+ * Dual licensed under the MIT or GPL Version 2 licenses.
7
+ * http://jquery.org/license
8
+ *
9
+ * Date: 2010-12-29 14:59:02 +0200 (Wed, 29 Dec 2010)
10
+ */
11
+ (function(c){c.address=function(){var z=function(a){c(c.address).trigger(c.extend(c.Event(a),function(){for(var b={},e=c.address.parameterNames(),h=0,q=e.length;h<q;h++)b[e[h]]=c.address.parameter(e[h]);return{value:c.address.value(),path:c.address.path(),pathNames:c.address.pathNames(),parameterNames:e,parameters:b,queryString:c.address.queryString()}}.call(c.address)))},A=function(a,b,e){c(c.address).bind(a,b,e);return c.address},C=function(){return B.pushState&&d.state!==i},u=function(){return("/"+
12
+ g.pathname.replace(new RegExp(d.state),"")+g.search+(K()?"#"+K():"")).replace(ba,"/")},K=function(){var a=g.href.indexOf("#");return a!=-1?D(g.href.substr(a+1),l):""},w=function(){return C()?u():K()},va=function(){return"javascript"},s=function(a){a=a.toString();return(d.strict&&a.substr(0,1)!="/"?"/":"")+a},D=function(a,b){if(d.crawlable&&b)return(a!=""?"!":"")+a;return a.replace(/^\!/,"")},E=function(a,b){return parseInt(a.css(b),10)},ca=function(a){for(var b,e,h=0,q=a.childNodes.length;h<q;h++){if(a.childNodes[h].src)b=
13
+ String(a.childNodes[h].src);if(e=ca(a.childNodes[h]))b=e}return b},O=function(){if(!T){var a=w(),b=f!=a;if(F&&p<523){if(L!=B.length){L=B.length;if(J[L-1]!==i)f=J[L-1];M(l)}}else if(b)if(G&&p<7)g.reload();else{G&&p<8&&d.history&&x(W,50);f=a;M(l)}}},M=function(a){z(da);z(a?ea:fa);x(ga,10)},ga=function(){if(d.tracker!=="null"&&d.tracker!==null){var a=c.isFunction(d.tracker)?d.tracker:k[d.tracker],b=(g.pathname+g.search+(c.address&&!C()?c.address.value():"")).replace(/\/\//,"/").replace(/^\/$/,"");if(c.isFunction(a))a(b);
14
+ else if(c.isFunction(k.urchinTracker))k.urchinTracker(b);else if(k.pageTracker!==i&&c.isFunction(k.pageTracker._trackPageview))k.pageTracker._trackPageview(b);else k._gaq!==i&&c.isFunction(k._gaq.push)&&k._gaq.push(["_trackPageview",b])}},W=function(){var a=va()+":"+l+";document.open();document.writeln('<html><head><title>"+n.title.replace("'","\\'")+"</title><script>var "+r+' = "'+encodeURIComponent(w())+(n.domain!=g.host?'";document.domain="'+n.domain:"")+"\";<\/script></head></html>');document.close();";
15
+ if(p<7)o.src=a;else o.contentWindow.location.replace(a)},ia=function(){if(P&&ha!=-1){var a,b=P.substr(ha+1).split("&");for(v=0;v<b.length;v++){a=b[v].split("=");if(/^(autoUpdate|crawlable|history|strict|wrap)$/.test(a[0]))d[a[0]]=isNaN(a[1])?/^(true|yes)$/i.test(a[1]):parseInt(a[1],10)!==0;if(/^(state|tracker)$/.test(a[0]))d[a[0]]=a[1]}P=null}f=w()},ka=function(){if(!ja){ja=m;ia();var a=function(){wa.call(this);xa.call(this)},b=c("body").ajaxComplete(a);a();if(d.wrap){c("body > *").wrapAll('<div style="padding:'+
16
+ (E(b,"marginTop")+E(b,"paddingTop"))+"px "+(E(b,"marginRight")+E(b,"paddingRight"))+"px "+(E(b,"marginBottom")+E(b,"paddingBottom"))+"px "+(E(b,"marginLeft")+E(b,"paddingLeft"))+'px;" />').parent().wrap('<div id="'+r+'" style="height:100%;overflow:auto;position:relative;'+(F?window.statusbar.visible&&!/chrome/i.test(X)?"":"resize:both;":"")+'" />');c("html, body").css({height:"100%",margin:0,padding:0,overflow:"hidden"});F&&c('<style type="text/css" />').appendTo("head").text("#"+r+"::-webkit-resizer { background-color: #fff; }")}if(G&&
17
+ p<8){a=n.getElementsByTagName("frameset")[0];o=n.createElement((a?"":"i")+"frame");if(a){a.insertAdjacentElement("beforeEnd",o);a[a.cols?"cols":"rows"]+=",0";o.noResize=m;o.frameBorder=o.frameSpacing=0}else{o.style.display="none";o.style.width=o.style.height=0;o.tabIndex=-1;n.body.insertAdjacentElement("afterBegin",o)}x(function(){c(o).bind("load",function(){var e=o.contentWindow;f=e[r]!==i?e[r]:"";if(f!=w()){M(l);g.hash=D(f,m)}});o.contentWindow[r]===i&&W()},50)}else if(F){if(p<418){c(n.body).append('<form id="'+
18
+ r+'" style="position:absolute;top:-9999px;" method="get"></form>');Y=n.getElementById(r)}if(g[r]===i)g[r]={};if(g[r][g.pathname]!==i)J=g[r][g.pathname].split(",")}x(function(){z("init");M(l)},1);if(!C())if(G&&p>7||!G&&"on"+Q in k)if(k.addEventListener)k.addEventListener(Q,O,l);else k.attachEvent&&k.attachEvent("on"+Q,O);else ya(O,50)}},wa=function(){var a,b=c("a"),e=b.size(),h=-1;x(function(){if(++h!=e){a=c(b.get(h));a.is("[rel*=address:]")&&a.address();x(arguments.callee,1)}},1)},za=function(){if(f!=
19
+ w()){f=w();M(l)}},Aa=function(){if(k.removeEventListener)k.removeEventListener(Q,O,l);else k.detachEvent&&k.detachEvent("on"+Q,O)},xa=function(){if(d.crawlable){var a=g.pathname.replace(/\/$/,"");c("body").html().indexOf("_escaped_fragment_")!=-1&&c("a[href]:not([href^=http]), , a[href*="+document.domain+"]").each(function(){var b=c(this).attr("href").replace(/^http:/,"").replace(new RegExp(a+"/?$"),"");if(b==""||b.indexOf("_escaped_fragment_")!=-1)c(this).attr("href","#"+c.address.decode(b.replace(/\/(.*)\?_escaped_fragment_=(.*)$/,
20
+ "!$2")))})}},la=function(a){return a.replace(/\+/g," ")},H=function(a){return ma(na(a)).replace(/%20/g,"+")},oa=function(a){return a.split("#")[0].split("?")[0]},pa=function(a){a=oa(a);var b=a.replace(ba,"/").split("/");if(a.substr(0,1)=="/"||a.length===0)b.splice(0,1);a.substr(a.length-1,1)=="/"&&b.splice(b.length-1,1);return b},R=function(a){a=a.split("?");return a.slice(1,a.length).join("?").split("#")[0]},qa=function(a,b){if(b=R(b)){params=b.split("&");b=[];for(v=0;v<params.length;v++){var e=
21
+ params[v].split("=");if(e[0]==a||c.address.decode(e[0])==a)b.push(e.slice(1).join("="))}if(b.length!==0)return b.length!=1?b:b[0]}},ra=function(a){var b=R(a);a=[];if(b&&b.indexOf("=")!=-1){b=b.split("&");for(var e=0;e<b.length;e++){var h=b[e].split("=")[0];c.inArray(h,a)==-1&&a.push(h)}}return a},U=function(a){a=a.split("#");return a.slice(1,a.length).join("#")},i,r="jQueryAddress",Q="hashchange",da="change",ea="internalChange",fa="externalChange",m=true,l=false,d={autoUpdate:m,crawlable:l,history:m,
22
+ strict:m,wrap:l},t=c.browser,p=parseFloat(c.browser.version),sa=t.mozilla,G=t.msie,ta=t.opera,F=t.webkit||t.safari,Z=l,k=function(){try{return top.document!==i?top:window}catch(a){return window}}(),n=k.document,B=k.history,g=k.location,ya=setInterval,x=setTimeout,ma=encodeURIComponent,na=decodeURIComponent,ba=/\/{2,9}/g,X=navigator.userAgent,o,Y,P=ca(document),ha=P?P.indexOf("?"):-1,$=n.title,L=B.length,T=l,ja=l,aa=m,ua=m,V=l,J=[],f=w();if(G){p=parseFloat(X.substr(X.indexOf("MSIE")+4));if(n.documentMode&&
23
+ n.documentMode!=p)p=n.documentMode!=8?7:8;c(document).bind("propertychange",function(){if(n.title!=$&&n.title.indexOf("#"+w())!=-1)n.title=$})}if(Z=sa&&p>=1||G&&p>=6||ta&&p>=9.5||F&&p>=312){for(var v=1;v<L;v++)J.push("");J.push(f);if(ta)history.navigationMode="compatible";if(document.readyState=="complete")var Ba=setInterval(function(){if(c.address){ka();clearInterval(Ba)}},50);else{ia();c(ka)}t=u();if(d.state!==i)if(B.pushState)t.substr(0,3)=="/#/"&&g.replace(d.state.replace(/^\/$/,"")+t.substr(2));
24
+ else t!="/"&&t.replace(/^\/#/,"")!=K()&&g.replace(d.state.replace(/^\/$/,"")+"/#"+t);c(window).bind("popstate",za).bind("unload",Aa)}else!Z&&K()!=""||F&&p<418&&K()!=""&&g.search!=""?g.replace(g.href.substr(0,g.href.indexOf("#"))):ga();return{bind:function(a,b,e){return A(a,b,e)},init:function(a){return A("init",a)},change:function(a){return A(da,a)},internalChange:function(a){return A(ea,a)},externalChange:function(a){return A(fa,a)},baseURL:function(){var a=g.href;if(a.indexOf("#")!=-1)a=a.substr(0,
25
+ a.indexOf("#"));if(/\/$/.test(a))a=a.substr(0,a.length-1);return a},autoUpdate:function(a){if(a!==i){d.autoUpdate=a;return this}return d.autoUpdate},crawlable:function(a){if(a!==i){d.crawlable=a;return this}return d.crawlable},history:function(a){if(a!==i){d.history=a;return this}return d.history},state:function(a){if(a!==i){d.state=a;return this}return d.state},strict:function(a){if(a!==i){d.strict=a;return this}return d.strict},tracker:function(a){if(a!==i){d.tracker=a;return this}return d.tracker},
26
+ wrap:function(a){if(a!==i){d.wrap=a;return this}return d.wrap},update:function(){V=m;this.value(f);V=l;return this},encode:function(a){var b=pa(a),e=ra(a),h=R(a),q=U(a),I=a.substr(0,1),N=a.substr(a.length-1),j="";c.each(b,function(y,S){j+="/"+H(S)});if(h!==""){j+="?";if(e.length===0)j+=h;else{c.each(e,function(y,S){y=qa(S,a);if(typeof y!=="string")c.each(y,function(Da,Ca){j+=H(S)+"="+H(Ca)+"&"});else j+=H(S)+"="+H(y)+"&"});j=j.substr(0,j.length-1)}}if(q!=="")j+="#"+H(q);if(I!="/"&&j.substr(0,1)==
27
+ "/")j=j.substr(1);if(I=="/"&&j.substr(0,1)!="/")j="/"+j;if(/#|&|\?/.test(N))j+=N;return j},decode:function(a){if(a!==i){var b=[],e=function(I){return na(I.toString().replace(/\+/g,"%20"))};if(typeof a=="object"&&a.length!==i){for(var h=0,q=a.length;h<q;h++)b[h]=e(a[h]);return b}else return e(a)}},title:function(a){if(a!==i){x(function(){$=n.title=a;if(ua&&o&&o.contentWindow&&o.contentWindow.document){o.contentWindow.document.title=a;ua=l}if(!aa&&sa)g.replace(g.href.indexOf("#")!=-1?g.href:g.href+
28
+ "#");aa=l},50);return this}return n.title},value:function(a){if(a!==i){a=s(a);if(d.autoUpdate)a=this.encode(a);if(a=="/")a="";if(f==a&&!V)return;aa=m;f=a;if(d.autoUpdate||V){M(m);if(C())B[d.history?"pushState":"replaceState"]({},"",d.state.replace(/\/$/,"")+(f==""?"/":f));else{T=m;J[B.length]=f;if(F)if(d.history){g[r][g.pathname]=J.toString();L=B.length+1;if(p<418){if(g.search==""){Y.action="#"+D(f,m);Y.submit()}}else if(p<523||f==""){a=n.createEvent("MouseEvents");a.initEvent("click",m,m);var b=
29
+ n.createElement("a");b.href="#"+D(f,m);b.dispatchEvent(a)}else g.hash="#"+D(f,m)}else g.replace("#"+D(f,m));else if(f!=w())if(d.history)g.hash="#"+D(f,m);else g.replace("#"+D(f,m));G&&p<8&&d.history&&x(W,50);if(F)x(function(){T=l},1);else T=l}}return this}if(!Z)return null;return this.decode(s(f))},path:function(a){if(a!==i){var b=R(s(f)),e=U(s(f));this.value(a+(b?"?"+b:"")+(e?"#"+e:""));return this}return this.decode(oa(s(f)))},pathNames:function(){return this.decode(pa(s(f)))},queryString:function(a){if(a!==
30
+ i){var b=U(s(f));this.value(this.path()+(a?"?"+a:"")+(b?"#"+b:""));return this}return this.decode(R(s(f)))},parameter:function(a,b,e){var h,q;if(b!==i){var I=this.parameterNames();q=[];b=b?ma(b):"";for(h=0;h<I.length;h++){var N=I[h],j=this.parameter(N);if(typeof j=="string")j=[j];if(N==a)j=b===null||b===""?[]:e?j.concat([b]):[b];for(var y=0;y<j.length;y++)q.push(N+"="+la(H(j[y])))}c.inArray(a,I)==-1&&b!==null&&b!==""&&q.push(a+"="+la(H(b)));this.queryString(q.join("&"));return this}return this.decode(qa(a,
31
+ s(f)))},parameterNames:function(){return this.decode(ra(s(f)))},hash:function(a){if(a!==i){this.value(s(f).split("#")[0]+(a?"#"+a:""));return this}return this.decode(U(s(f)))}}}();c.fn.address=function(z){if(!c(this).attr("address")){var A=function(C){if(c(this).is("a")){var u=z?z.call(this):/address:/.test(c(this).attr("rel"))?c(this).attr("rel").split("address:")[1].split(" ")[0]:c.address.state()!==undefined&&c.address.state()!="/"?c(this).attr("href").replace(new RegExp("^(.*"+c.address.state()+
32
+ "|\\.)"),""):c(this).attr("href").replace(/^(#\!?|\.)/,"");c.address.value(u);C.preventDefault()}};c(this).click(A).live("click",A).live("submit",function(C){if(c(this).is("form")){var u=c(this).attr("action");u=z?z.call(this):(u.indexOf("?")!=-1?u.replace(/&$/,""):u+"?")+c.address.decode(c(this).serialize());c.address.value(u);C.preventDefault()}}).attr("address",true)}return this}})(jQuery);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) 2009 Sergiy Kovalchuk (serg472@gmail.com)
3
+ *
4
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
5
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
6
+ *
7
+ * Following code is based on Element.mask() implementation from ExtJS framework (http://extjs.com/)
8
+ *
9
+ */
10
+ (function(a){a.fn.mask=function(c,b){a(this).each(function(){if(b!==undefined&&b>0){var d=a(this);d.data("_mask_timeout",setTimeout(function(){a.maskElement(d,c)},b))}else{a.maskElement(a(this),c)}})};a.fn.unmask=function(){a(this).each(function(){a.unmaskElement(a(this))})};a.fn.isMasked=function(){return this.hasClass("masked")};a.maskElement=function(d,c){if(d.data("_mask_timeout")!==undefined){clearTimeout(d.data("_mask_timeout"));d.removeData("_mask_timeout")}if(d.isMasked()){a.unmaskElement(d)}if(d.css("position")=="static"){d.addClass("masked-relative")}d.addClass("masked");var e=a('<div class="loadmask"></div>');if(navigator.userAgent.toLowerCase().indexOf("msie")>-1){e.height(d.height()+parseInt(d.css("padding-top"))+parseInt(d.css("padding-bottom")));e.width(d.width()+parseInt(d.css("padding-left"))+parseInt(d.css("padding-right")))}if(navigator.userAgent.toLowerCase().indexOf("msie 6")>-1){d.find("select").addClass("masked-hidden")}d.append(e);if(c!==undefined){var b=a('<div class="loadmask-msg" style="display:none;"></div>');b.append("<div>"+c+"</div>");d.append(b);b.css("top",Math.round(d.height()/2-(b.height()-parseInt(b.css("padding-top"))-parseInt(b.css("padding-bottom")))/2)+"px");b.css("left",Math.round(d.width()/2-(b.width()-parseInt(b.css("padding-left"))-parseInt(b.css("padding-right")))/2)+"px");b.show()}};a.unmaskElement=function(b){if(b.data("_mask_timeout")!==undefined){clearTimeout(b.data("_mask_timeout"));b.removeData("_mask_timeout")}b.find(".loadmask-msg,.loadmask").remove();b.removeClass("masked");b.removeClass("masked-relative");b.find("select").removeClass("masked-hidden")}})(jQuery);
@@ -0,0 +1,40 @@
1
+ .loadmask {
2
+ z-index: 100;
3
+ position: absolute;
4
+ top:0;
5
+ left:0;
6
+ -moz-opacity: 0.5;
7
+ opacity: .50;
8
+ filter: alpha(opacity=50);
9
+ background-color: #CCC;
10
+ width: 100%;
11
+ height: 100%;
12
+ zoom: 1;
13
+ }
14
+ .loadmask-msg {
15
+ z-index: 20001;
16
+ position: absolute;
17
+ top: 0;
18
+ left: 0;
19
+ border:1px solid #6593cf;
20
+ background: #c3daf9;
21
+ padding:2px;
22
+ }
23
+ .loadmask-msg div {
24
+ padding:5px 10px 5px 25px;
25
+ background: #fbfbfb url('/images/loading_icon.gif') no-repeat 5px 5px;
26
+ line-height: 16px;
27
+ border:1px solid #a3bad9;
28
+ color:#222;
29
+ font:normal 11px tahoma, arial, helvetica, sans-serif;
30
+ cursor:wait;
31
+ }
32
+ .masked {
33
+ overflow: hidden !important;
34
+ }
35
+ .masked-relative {
36
+ position: relative !important;
37
+ }
38
+ .masked-hidden {
39
+ visibility: hidden !important;
40
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: erp_app
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.6
4
+ version: 3.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-27 00:00:00.000000000 Z
12
+ date: 2012-07-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: will_paginate
16
- requirement: &70154516008580 !ruby/object:Gem::Requirement
16
+ requirement: &70129997617900 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - =
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.0.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70154516008580
24
+ version_requirements: *70129997617900
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: uglifier
27
- requirement: &70154516008000 !ruby/object:Gem::Requirement
27
+ requirement: &70129997620420 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.3
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70154516008000
35
+ version_requirements: *70129997620420
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: erp_tech_svcs
38
- requirement: &70154516007380 !ruby/object:Gem::Requirement
38
+ requirement: &70129997463880 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70154516007380
46
+ version_requirements: *70129997463880
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: erp_dev_svcs
49
- requirement: &70154516006620 !ruby/object:Gem::Requirement
49
+ requirement: &70129997408200 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '3.0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70154516006620
57
+ version_requirements: *70129997408200
58
58
  description: Provides an application infrastructure based on the Sencha/extjs UI framework,
59
59
  as well as several utilities and example applications. It houses the core application
60
60
  container framework and component model infrastructure that play a key role in the
@@ -1568,6 +1568,8 @@ files:
1568
1568
  - public/javascripts/extjs/Ext.ux.form.MultiSelect.js
1569
1569
  - public/javascripts/extjs/ext_ux_tab_close_menu.js
1570
1570
  - public/javascripts/extjs/overrides.js
1571
+ - public/javascripts/jquery_plugins/jquery.address.min.js
1572
+ - public/javascripts/jquery_plugins/jquery.loadmask.min.js
1571
1573
  - public/javascripts/sencha_touch/sencha-touch-all-debug.js
1572
1574
  - public/javascripts/sencha_touch/sencha-touch-all.js
1573
1575
  - public/stylesheets/erp_app/desktop/base.css
@@ -2845,6 +2847,7 @@ files:
2845
2847
  - public/stylesheets/extjs/resources/themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss
2846
2848
  - public/stylesheets/extjs/resources/themes/templates/resources/sass/config.rb
2847
2849
  - public/stylesheets/extjs/resources/themes/templates/resources/sass/my-ext-theme.scss
2850
+ - public/stylesheets/jquery_plugins/jquery.loadmask.css
2848
2851
  - public/stylesheets/sencha_touch/resources/css/android.css
2849
2852
  - public/stylesheets/sencha_touch/resources/css/apple.css
2850
2853
  - public/stylesheets/sencha_touch/resources/css/bb6.css