moksha/api/errorcodes.py | 81 ++++----------------------
moksha/api/widgets/grid.py | 3
moksha/api/widgets/moksha.py | 8 ++
moksha/lib/helpers.py | 64 ++++++++++++++++++++
moksha/public/javascript/moksha.js | 5 +
moksha/public/javascript/ui/moksha.ui.grid.js | 18 +++++
6 files changed, 107 insertions(+), 72 deletions(-)
New commits:
commit ba96d2087eb1beb1ab4fb54007ebbd2595793ec3
Author: John (J5) Palmieri <johnp(a)redhat.com>
Date: Tue Mar 31 17:44:30 2009 -0400
add the ability to add a "more" link instead of a pager
diff --git a/moksha/api/widgets/grid.py b/moksha/api/widgets/grid.py
index bd0555d..5d63284 100644
--- a/moksha/api/widgets/grid.py
+++ b/moksha/api/widgets/grid.py
@@ -21,7 +21,7 @@ class Grid(FormField):
params= ['rows_per_page', 'page_num', 'total_rows',
'filters', 'unique_key', 'sort_key', 'sort_order',
'row_template', 'resource', 'resource_path',
- 'loading_throbber', 'uid']
+ 'loading_throbber', 'uid', 'more_link']
hidden = True # hide from the moksha main menu
rows_per_page = 10
@@ -35,6 +35,7 @@ class Grid(FormField):
resource = None
resource_path = None
loading_throbber = None
+ more_link = None
def update_params(self, d):
super(Grid, self).update_params(d)
diff --git a/moksha/public/javascript/ui/moksha.ui.grid.js b/moksha/public/javascript/ui/moksha.ui.grid.js
index cd12a9a..e3d963c 100644
--- a/moksha/public/javascript/ui/moksha.ui.grid.js
+++ b/moksha/public/javascript/ui/moksha.ui.grid.js
@@ -220,7 +220,14 @@
}
$('.message', self.$pager_bottom_placeholder).html(msg);
- var pager = self._generate_numerical_pager(tr, sr, rpp);
+
+ var pager;
+ if (o.more_link)
+ pager = self._generate_more_link(o.more_link,
+ search_criteria.filters);
+ else
+ pager = self._generate_numerical_pager(tr, sr, rpp);
+
$('.pager', self.$pager_bottom_placeholder).html(pager);
}
@@ -347,6 +354,14 @@
self.request_data_refresh();
},
+ _generate_more_link: function (more_link, filters) {
+ var go = moksha.csrf_rewrite_url(more_link);
+ var pager = $('<a>View more ></a>').attr('href',
+ 'javascript:moksha.goto("' + go + '")');
+
+ return pager;
+ },
+
_generate_numerical_pager: function (total_rows, start_row, rows_per_page) {
var self = this;
var o = self.options;
@@ -483,6 +498,7 @@
pagerTopClass: 'moksha-grid-pager-top',
pagerBottomClass: 'moksha-grid-pager-bottom',
pagerPageLimit: 10,
+ more_link: null,
loading_throbber: ["Loading", // list of img urls or text
"Loading.",
"Loading..",
commit 99d26a84589afe2262cfcc680dec8ef8473d33f0
Author: John (J5) Palmieri <johnp(a)redhat.com>
Date: Tue Mar 31 17:43:08 2009 -0400
export debug config to javascript so we can check if we are in debug mode
diff --git a/moksha/api/widgets/moksha.py b/moksha/api/widgets/moksha.py
index 86d6d28..7970161 100644
--- a/moksha/api/widgets/moksha.py
+++ b/moksha/api/widgets/moksha.py
@@ -31,14 +31,16 @@ class MokshaGlobals(Widget):
moksha_base_url = "${base_url}";
moksha_csrf_token = "${csrf_token}";
moksha_userid = "${user_id}";
+moksha_debug = ${debug};
</script>
"""
- params = ['base_url', 'csrf_token', 'user_id']
+ params = ['base_url', 'csrf_token', 'user_id', 'debug']
engine_name = 'mako'
base_url = '/'
csrf_token = ''
user_id = ''
+ debug = 'false'
def __init__(self, *args, **kw):
super(MokshaGlobals, self).__init__(*args, **kw)
@@ -46,6 +48,10 @@ moksha_userid = "${user_id}";
def update_params(self, d):
super(MokshaGlobals, self).update_params(d)
+
+ if pylons.config.get('debug'):
+ d['debug'] = 'true'
+
d['base_url'] = tg.url('/')
identity = pylons.request.environ.get('repoze.who.identity')
diff --git a/moksha/public/javascript/moksha.js b/moksha/public/javascript/moksha.js
index ef38348..382b3bd 100644
--- a/moksha/public/javascript/moksha.js
+++ b/moksha/public/javascript/moksha.js
@@ -236,7 +236,10 @@ moksha = {
// TODO: provide a reload link in the overlay
if (typeof($overlay_div) == 'object') {
var $msg = $('.message', $overlay_div);
- $msg.html(status);
+ if (moksha_debug)
+ console.log(err);
+
+ $msg.html(error);
}
}
commit 501d07fd80d9225341d24f8944418fcbeca9963c
Author: John (J5) Palmieri <johnp(a)redhat.com>
Date: Tue Mar 31 17:42:03 2009 -0400
make enums generic, not just for passing errors
diff --git a/moksha/api/errorcodes.py b/moksha/api/errorcodes.py
index 2fbc4bf..43dda48 100644
--- a/moksha/api/errorcodes.py
+++ b/moksha/api/errorcodes.py
@@ -1,76 +1,21 @@
from paste.response import replace_header
+from moksha.lib.helpers import CategoryEnum
-class ErrObj(dict):
- def __init__(self, code, msg):
- super(ErrObj, self).__init__(code=code, msg=msg)
-
- def __getattribute__(self, name):
- try:
- return super(ErrObj, self).__getattribute__(name)
- except AttributeError, e:
- if name in self:
- return self[name]
-
- raise e
-
- def replace_app_header(self, app, header_name):
- if app.headers:
- headers = list(app.headers)
- else:
- headers = []
-
- replace_header(headers, header_name, self.code)
- app.headers = headers
-
- def __repr__(self):
- # act as if the user requested the code
- return str(self['code'])
-
-class ErrEnum(object):
- def __init__(self, prefix, *errs):
- self._prefix = prefix
- self._code_map = {}
-
- for number, e in enumerate(errs):
- # we prefix the code so we can validate
- code = '%s_%d' % (prefix, number)
- eob = ErrObj(code, e[1])
- setattr(self, e[0], eob)
- setattr(self, code, eob)
- self._code_map[code] = e[0]
-
- def is_valid_class(self, err_code):
- if err_code.beginswith(self._prefix + '_'):
- return True
-
- return False
-
- def code_to_attr(self, code):
- return self._code_map[code]
-
- def attr_to_code(self, attr):
- return self.__getattribute__(attr).code
-
+class ErrEnum(CategoryEnum):
def attr_to_message(self, attr):
- return self.__getattribute__(attr).msg
-
- def get_code(self, attr):
- return self.attr_to_code(attr)
+ return self.attr_to_data(attr)
def get_message(self, attr):
- return self.attr_to_message(attr)
-
- def __call__(self, err_code):
- return self.get_message(err_code)
+ return self.get_data(attr)
login_err = ErrEnum ('login_err',
('USERNAME_PASSWORD_ERROR',
- ('The username or password you entered is not valid. Please '
- 'try again.')
- ),
- ('UNKOWN_AUTH_ERROR',
- ('An unknown error occurred while trying to log you in. '
- 'Please try again later or notify an admin if the problem '
- 'persists')
- )
- )
\ No newline at end of file
+ ('The username or password you entered is not valid. Please '
+ 'try again.')
+ ),
+ ('UNKOWN_AUTH_ERROR',
+ ('An unknown error occurred while trying to log you in. '
+ 'Please try again later or notify an admin if the problem '
+ 'persists')
+ )
+ )
\ No newline at end of file
diff --git a/moksha/lib/helpers.py b/moksha/lib/helpers.py
index b181d20..eef8bf6 100644
--- a/moksha/lib/helpers.py
+++ b/moksha/lib/helpers.py
@@ -674,3 +674,67 @@ def to_unicode(obj, encoding='utf-8'):
if not isinstance(obj, unicode):
obj = unicode(obj, encoding, 'replace')
return obj
+
+class EnumDataObj(dict):
+ def __init__(self, code, data):
+ super(EnumDataObj, self).__init__(code=code, data=data)
+
+ def __getattribute__(self, name):
+ try:
+ return super(EnumDataObj, self).__getattribute__(name)
+ except AttributeError, e:
+ if name in self:
+ return self[name]
+
+ raise e
+
+ def replace_app_header(self, app, header_name):
+ from paste.response import replace_header
+ if app.headers:
+ headers = list(app.headers)
+ else:
+ headers = []
+
+ replace_header(headers, header_name, self.code)
+ app.headers = headers
+
+ def __repr__(self):
+ # act as if the user requested the code
+ return str(self['code'])
+
+class CategoryEnum(object):
+ def __init__(self, prefix, *data):
+ self._prefix = prefix
+ self._code_map = {}
+
+ for number, d in enumerate(data):
+ # we prefix the code so we can validate
+ code = '%s_%d' % (prefix, number)
+ dob = EnumDataObj(code, d[1])
+ setattr(self, d[0], dob)
+ setattr(self, code, dob)
+ self._code_map[code] = d[0]
+
+ def is_valid_class(self, code):
+ if code.beginswith(self._prefix + '_'):
+ return True
+
+ return False
+
+ def code_to_attr(self, code):
+ return self._code_map[code]
+
+ def attr_to_code(self, attr):
+ return self.__getattribute__(attr).code
+
+ def attr_to_data(self, attr):
+ return self.__getattribute__(attr).data
+
+ def get_code(self, attr):
+ return self.attr_to_code(attr)
+
+ def get_data(self, attr):
+ return self.attr_to_data(attr)
+
+ def __call__(self, code):
+ return self.get_data(code)
\ No newline at end of file