コード例 #1
0
ファイル: orbited.py プロジェクト: decause/moksha
class OrbitedWidget(twc.Widget):
    onopen = twc.Param("A javascript callback for when the connection opens",
                       default=twc.js_callback('function(){}'))
    onread = twc.Param("A javascript callback for when new data is read",
                       default=twc.js_callback('function(){}'))
    onclose = twc.Param("A javascript callback for when the connection closes",
                        default=twc.js_callback('function(){}'))
    resources = [orbited_js]
    template = """
        <script type="text/javascript">
            Orbited.settings.port = %(port)s
            Orbited.settings.hostname = '%(host)s'
            document.domain = document.domain
            TCPSocket = Orbited.TCPSocket
            connect = function() {
                conn = new TCPSocket()
                conn.onread = ${onread}
                conn.onopen = ${onopen}
                conn.onclose = ${onclose}
                conn.open('%(host)s', %(port)s)
            }
            $(document).ready(function() {
                connect()
            })
        </script>
    """ % {
        'port': orbited_port,
        'host': orbited_host
    }
コード例 #2
0
ファイル: custom_widgets.py プロジェクト: BenoitEchernier/web
    def __init__(self, **kwargs):
        super(PersistentSelect2MultipleSelect, self).__init__(**kwargs)
        self.resources = [select2_persistence_js]
        self.ondemand = True
        self.validator = self.validator or Validator()

        self.options = []

        self.opts = self.opts.copy()
        self.opts['initSelection'] = twc.js_callback(
            '''
            function(element, callback) {
                var init_data = [];

                param = params['%(param)s'];

                if(typeof param !== "undefined" && param) {
                    $.each(param.split(','), function(i, v) {
                        var elem = {};
                        elem.id = v;
                        elem.text = v;
                        init_data.push(elem);
                    });
                }

                callback(init_data);
            }
            ''' % dict(param=self.name)
        )
コード例 #3
0
    def __init__(self, **kwargs):
        super(PersistentSelect2MultipleSelect, self).__init__(**kwargs)
        self.resources = [select2_persistence_js]
        self.ondemand = True
        self.validator = self.validator or Validator()

        self.options = []

        self.opts = self.opts.copy()
        self.opts['initSelection'] = twc.js_callback('''
            function(element, callback) {
                var init_data = [];

                param = params['%(param)s'];

                if(typeof param !== "undefined" && param) {
                    $.each(param.split(','), function(i, v) {
                        var elem = {};
                        elem.id = v;
                        elem.text = v;
                        init_data.push(elem);
                    });
                }

                callback(init_data);
            }
            ''' % dict(param=self.name))
コード例 #4
0
    def __init__(self, **kwargs):
        super(PersistentSelect2SingleSelect, self).__init__(**kwargs)
        self.resources = [select2_persistence_js]

        self.ondemand = True
        self.validator = self.validator or Validator()

        self.js_dict_entries = [
            '%s: "%s"' % (key, value) for key, value in self.options
        ]
        self.js_opts_dict = '{%s}' % ', '.join(self.js_dict_entries)

        self.opts = self.opts.copy()
        self.opts['initSelection'] = twc.js_callback('''
            function (element, callback) {
                var init_data;
                var list_opts = %(options)s;
                var param = params['%(param)s'];

                if(typeof param !== "undefined" && param) {
                    var elem = {};
                    elem.id = param;

                    if(param in list_opts) {
                        elem.text = list_opts[param];
                    }

                    init_data = elem;
                }

                callback(init_data);
            }
            ''' % dict(options=self.js_opts_dict, param=self.name))
コード例 #5
0
ファイル: custom_widgets.py プロジェクト: BenoitEchernier/web
    def __init__(self, **kwargs):
        super(PersistentSelect2SingleSelect, self).__init__(**kwargs)
        self.resources = [select2_persistence_js]

        self.ondemand = True
        self.validator = self.validator or Validator()

        self.js_dict_entries = ['%s: "%s"' % (key, value)
                                for key, value in self.options]
        self.js_opts_dict = '{%s}' % ', '.join(self.js_dict_entries)

        self.opts = self.opts.copy()
        self.opts['initSelection'] = twc.js_callback(
            '''
            function (element, callback) {
                var init_data;
                var list_opts = %(options)s;
                var param = params['%(param)s'];

                if(typeof param !== "undefined" && param) {
                    var elem = {};
                    elem.id = param;

                    if(param in list_opts) {
                        elem.text = list_opts[param];
                    }

                    init_data = elem;
                }

                callback(init_data);
            }
            ''' % dict(options=self.js_opts_dict, param=self.name)
        )
コード例 #6
0
def gritter_callback(**kw):
    """ Return js_callbacks that create gritter popups.

    >>> gritter_callback(title="Some Title", text="A message...")

    """
    json = simplejson.dumps(kw)
    return twc.js_callback('function() { $.gritter.add(%s); }' % json)
コード例 #7
0
def gritter_callback(**kw):
    """ Return js_callbacks that create gritter popups.

    >>> gritter_callback(title="Some Title", text="A message...")

    """
    json = simplejson.dumps(kw)
    return twc.js_callback('function() { $.gritter.add(%s); }' % json)
コード例 #8
0
ファイル: poly.py プロジェクト: lmacken/polygrid
    def prepare(self):
        super(PolyGrid, self).prepare()
        if not getattr(self, 'id', None):
            self.id = str(uuid4())

        Knowledge = get_knowledge_session("sqlite:///knowledge.db")
        #entity = Entity.by_name(self.model)
        self.entity = Knowledge.query(Entity).filter(Entity.name.like('user_%')).first()

        #colNames = get_colnames_from_entity(entity)
        #colModel = get_colmodel_from_entity(entity)
        colModel, colNames = get_colmodel_and_colnames_from_entity(Knowledge, 'user_%')

        params = {
            'url': '/grid/query?like=user_%',
            'datatype': 'json',
            'colNames': colNames,
            'colModel': colModel,
            'height': 550,
            'rowNum': 25,
            #'rowList': [10,20,30],
            'pager': '#%s_pager' % self.id,
            'sortname': 'id',
            'viewrecords': True,
            'sortorder': "desc",
            'caption': self.entity.name,
            'autowidth': True,
            'loadui': 'block',
            #'shrinkToFit': True,
            'forcefit': True,
            }

        self.add_call(jQuery('#' + self.id)
                        .jqGrid(params)
                        .navGrid('#%s_pager' % self.id, {
                            'add': False,
                            'del': False,
                            'edit': False,
                            'search': False,
                            }, {}, {}, {}, {'multipleSearch': True}))

        self.add_call(jQuery('#' + self.id)
                        .jqGrid('filterToolbar',{
                            'stringResult': True,
                            'searchOnEnter': False
                            }));

        self.add_call(jQuery('#' + self.id)
                        .jqGrid('navButtonAdd', '#%s_pager' % self.id, {
                            'caption': 'Columns',
                            'title': 'Reorder Columns',
                            'onClickButton': js_callback("""
                                function() {
                                    jQuery('#%s').jqGrid('columnChooser');
                                }
                            """ %  self.id),
                            }))
コード例 #9
0
ファイル: helpers.py プロジェクト: decause/moksha
def when_ready(func):
    """
    Takes a js_function and returns a js_callback that will run
    when the document is ready.

        >>> from tw.api import js_function
        >>> print when_ready(js_function('jQuery')('foo').bar({'biz': 'baz'}))
        $(document).ready(function(){jQuery("foo").bar({"biz": "baz"})});
    """
    return js_callback('$(document).ready(function(){' + str(func) + '});')
コード例 #10
0
ファイル: helpers.py プロジェクト: ShadowSam/moksha
def when_ready(func):
    """
    Takes a js_function and returns a js_callback that will run
    when the document is ready.

        >>> from tw.api import js_function
        >>> print when_ready(js_function('jQuery')('foo').bar({'biz': 'baz'}))
        $(document).ready(function(){jQuery("foo").bar({"biz": "baz"})});
    """
    from tw2.core import js_callback
    return js_callback('$(document).ready(function(){' + str(func) + '});')
コード例 #11
0
ファイル: test_js.py プロジェクト: Cito/tw2.core
    def test_encoding_widget_id(self):
        from tw2.core import Widget
        w = Widget("foo")

        f = js_callback(js_function('jQuery')(w).click(js_symbol('onClick')))
        args = {'onLoad': f}

        json = self.encode(args)
        eq_(json, '{"onLoad": function(){jQuery("foo").click(onClick)}}')

        json = self.encode({'args':args})
        eq_(json, '{"args": {"onLoad": function(){jQuery("foo").click(onClick)}}}')
コード例 #12
0
ファイル: test_js.py プロジェクト: mitin123/tw2.core
    def test_encoding_widget_id(self):
        from tw2.core import Widget
        w = Widget("foo")

        f = js_callback(js_function('jQuery')(w).click(js_symbol('onClick')))
        args = {'onLoad': f}

        json = self.encode(args)
        eq_(json, '{"onLoad": function(){jQuery("foo").click(onClick)}}')

        json = self.encode({'args': args})
        eq_(json,
            '{"args": {"onLoad": function(){jQuery("foo").click(onClick)}}}')
コード例 #13
0
ファイル: stomp.py プロジェクト: decause/moksha
    def prepare(self):
        if not self.orbited_url:
            self.orbited_url = '%s://%s:%s' % (
                self.orbited_scheme, self.orbited_host, self.orbited_port)
        super(StompWidget, self).prepare()
        self.onmessageframe = defaultdict(str)  # {topic: 'js callbacks'}
        for callback in self.callbacks:
            if len(moksha.utils.livewidgets[callback]):
                cbs = ''
                if callback == 'onmessageframe':
                    for topic in moksha.utils.livewidgets[callback]:
                        self.topics.append(topic)
                        for cb in moksha.utils.livewidgets[callback][topic]:
                            self.onmessageframe[topic] += '%s;' % str(cb)
                else:
                    for cb in moksha.utils.livewidgets[callback]:
                        if isinstance(cb, (twc.js_callback, js_function)):
                            cbs += '$(%s);' % str(cb)
                        else:
                            cbs += str(cb)
                if cbs:
                    setattr(self, callback, cbs)

        if self.notify:
            moksha_notify.register_resources()
            openmsg = "Moksha live socket connected"
            self.onopen = twc.js_callback('function() { $.jGrowl("%s") }' %
                                          openmsg)
            errormsg = "Moksha Live Socket Error: "
            self.onerror = twc.js_callback(
                'function(error) { $.jGrowl("%s" + error) }' % errormsg)
            errorframemsg = "Error frame received from Moksha Socket: "
            self.onerrorframe = twc.js_callback(
                'function(f) { $.jGrowl("%s" + f) }' % errorframemsg)
            closemsg = "Moksha Socket Closed"
            self.onclose = twc.js_callback('function(c) { $.jGrowl("%s") }' %
                                           closemsg)
コード例 #14
0
ファイル: test_resources.py プロジェクト: LeResKP/tw2.core
    def testJSFuncCallChained(self):
        rl = testapi.request(1, mw)
        options = {'foo': 20}
        jQuery = twc.js_function('jQuery')

        when_ready = lambda func: twc.js_callback(
            '$(document).ready(function(){' + str(func) + '});'
        )

        class Dummy(twc.Widget):
            id = 'dummy'
            template = "tw2.core.test_templates.display_only_test_widget"

            def prepare(self):
                super(Dummy, self).prepare()
                self.add_call(when_ready(
                    jQuery('.%s' % self.id).buildMenu(options)
                ))

        output = Dummy.display()
        eq_(len(rl['resources']), 1)
        eq_(str(rl['resources'][0]), '$(document).ready(function(){jQuery(".dummy").buildMenu({"foo": 20})});')
コード例 #15
0
    def testJSFuncCallChained(self):
        rl = testapi.request(1, mw)
        options = {'foo': 20}
        jQuery = twc.js_function('jQuery')

        when_ready = lambda func: twc.js_callback(
            '$(document).ready(function(){' + str(func) + '});')

        class Dummy(twc.Widget):
            id = 'dummy'
            template = "tw2.core.test_templates.display_only_test_widget"

            def prepare(self):
                super(Dummy, self).prepare()
                self.add_call(
                    when_ready(jQuery('.%s' % self.id).buildMenu(options)))

        output = Dummy.display()
        eq_(len(rl['resources']), 1)
        eq_(
            str(rl['resources'][0]),
            '$(document).ready(function(){jQuery(".dummy").buildMenu({"foo": 20})});'
        )
コード例 #16
0
class DemoSelect2AjaxSingleSelectField(Select2AjaxSingleSelectField):

    resources = [
        twc.CSSSource(location="headbottom",
                      src=""" 
            .zebra { background-color: #efefef; }
             img.flag { height: 10px; width: 15px; padding-right: 10px; }
            .movie-result td {vertical-align: top }
            .movie-image { width: 60px; }
            .movie-image img { height: 80px; width: 60px;  }
            .movie-info { padding-left: 10px; vertical-align: top; }
            .movie-title { font-size: 1.2em; padding-bottom: 15px; }
            .movie-synopsis { font-size: .8em; color: #888; }
            .select2-highlighted .movie-synopsis { font-size: .8em; color: #eee; }
            .bigdrop.select2-container .select2-results {max-height: 300px;}
            .bigdrop .select2-results {max-height: 300px;}
            """)
    ]

    attrs = dict(style='width: 100%;')
    options = []
    opts = dict(
        #placeholder=dict(title="Search for a movie", id=""),
        placeholder="Search for a movie...",
        minimumInputLength=2,
        ajax=dict(
            # instead of writing the function to execute the
            # request we use Select2's convenient helper
            url="http://api.rottentomatoes.com/api/public/v1.0/movies.json",
            dataType='jsonp',
            data=twc.js_callback("""
                function (term, page) {
                    return {
                        q: term, // search term
                        page_limit: 10,
                        apikey: "%s"
                    };
                }
                """ % APIKEY),
            results=twc.js_callback("""
                function (data, page) {
                    // parse the results into the format expected by Select2.
                    // since we are using custom formatting functions we do
                    // not need to alter remote JSON data
                    return {results: data.movies};
                }
                """),
        ),
        initSelection=twc.js_callback("""
            function(element, callback) {
             // the input tag has a value attribute preloaded that points to a 
             //preselected movie's id.  This function resolves that id attribute
             // to an object that select2 can render using its formatResult 
             // renderer - that way the movie name is shown preselected
                var id=$(element).val();
                if (id!=="") {
                  $.ajax("http://api.rottentomatoes.com/api/public/v1.0/movies/"+id+".json", {
                    data: {
                      apikey: "%s"
                    },
                    dataType: "jsonp"
                  }).done(function(data) { callback(data); });
                }
             }
            """ % APIKEY),
        formatSelection=twc.js_callback("""
            function (movie) {
                return movie.title;
            }
            """),
        formatResult=twc.js_callback("""
            function (movie) {
                var markup = "<table class='movie-result'><tr>";
                if (movie.posters !== undefined && movie.posters.thumbnail !== undefined) {
                    markup += "<td class='movie-image'><img src='" + movie.posters.thumbnail + "'/></td>";
                }
                markup += "<td class='movie-info'><div class='movie-title'>" + movie.title + "</div>";
                if (movie.critics_consensus !== undefined) {
                    markup += "<div class='movie-synopsis'>" + movie.critics_consensus + "</div>";
                }
                else if (movie.synopsis !== undefined) {
                    markup += "<div class='movie-synopsis'>" + movie.synopsis + "</div>";
                }
                markup += "</td></tr></table>"
                return markup;
            }
            """),
    )
コード例 #17
0
ファイル: test_js.py プロジェクト: mitin123/tw2.core
 def test_quotes_tripled(self):
     f = twc.js_callback("""function() { return "c"; }""")
     json = self.encode({'onLoad': f})
     eq_(json, '{"onLoad": function() { return "c"; }}')
コード例 #18
0
ファイル: test_js.py プロジェクト: mitin123/tw2.core
 def test_quotes_escape(self):
     f = twc.js_callback("function() { return \"c\"; }")
     json = self.encode({'onLoad': f})
     eq_(json, '{"onLoad": function() { return "c"; }}')
コード例 #19
0
ファイル: widgets.py プロジェクト: moschlar/tw2.codemirror
    def prepare(self):
        # put code here to run just before the widget is displayed
        super(CodeMirrorEditor, self).prepare()
        self.safe_modify("resources")

        options = self.default_options.copy()
        if self.options:
            options.update(self.options)

        try:
            (mode, mime) = mode_name(self.mode)
            self.resources.append(codemirror_modes[mode])
            options["mode"] = mime or mode
        except KeyError:
            pass

        if self.keymap:
            try:
                self.resources.append(codemirror_keymaps[self.keymap])
                options["keymap"] = self.keymap
            except KeyError:
                pass

        if self.theme:
            try:
                self.resources.append(codemirror_themes[self.theme])
                options["theme"] = self.theme
            except KeyError:
                pass

        options["lineNumbers"] = bool(self.lineNumbers)

        if self.firstLineNumber:
            options["firstLineNumber"] = self.firstLineNumber

        if self.height_from_rows and self.rows is not None:
            _css = twc.CSSSource(src=u"#%s + .CodeMirror {height: %dem;}" % (self.compound_id, self.rows))
            self.resources.append(_css)

        if self.fullscreen:
            self.resources.append(codemirror_addons["display"]["fullscreen"])
            # TODO: Customizable keys
            self.default_options["extraKeys"] = {
                "F11": twc.js_callback('function(cm) {cm.setOption("fullScreen", !cm.getOption("fullScreen"));}'),
                "Esc": twc.js_callback(
                    'function(cm) {if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);}'
                ),
            }
            try:
                _help_text = self.help_text
            except AttributeError:
                _help_text = u""
            self.safe_modify("help_text")
            self.help_text = "Press F11 when cursor is in the editor to toggle full screen editing. " "Esc can also be used to exit full screen editing." + Markup(
                "<br />"
            ) + (
                _help_text if _help_text else ""
            )

        if self.placeholder:
            self.resources.append(codemirror_addons["display"]["placeholder"])

        self.add_call(codemirror_js.fromTextArea(twc.js_function("document.getElementById")(self.compound_id), options))
コード例 #20
0
ファイル: test_js.py プロジェクト: mitin123/tw2.core
 def test_js_callback(self):
     eq_(str(js_callback("update_div")), 'update_div')
     eq_(str(js_callback(js_function('foo')(1, 2, 3))),
         'function(){foo(1, 2, 3)}')
コード例 #21
0
    def __init__(self, **kwargs):
        super(GeocompleteField, self).__init__(**kwargs)
        self.resources = [
            select2_persistence_js,
            twc.JSSource(src='''
                function format_name(name, complement, postal_code, country) {
                    var display_name = name;
                    display_name += ' ';

                    if(complement) {
                        display_name += complement;
                    }

                    display_name += ' - ';
                    display_name += postal_code;
                    display_name += ', ';
                    display_name += country;

                    return display_name.toUpperCase();
                }
                ''')
        ]
        self.options = []
        self.ondemand = True
        self.validator = self.validator or Validator()

        self.opts.copy()
        self.opts['minimumInputLength'] = 1
        self.opts['maximumInputLength'] = 125
        self.opts['allowClear'] = True
        self.opts['dropdownAutoWidth'] = True

        self.opts['initSelection'] = twc.js_callback("""
            function (element, callback) {
                var init_data;

                param = params['%(name)s'];

                if(typeof param !== "undefined" && param) {
                    var elem = {};
                    param_dict = JSON.parse(param);
                    elem.id = param;

                    name = format_name(
                        param_dict['name'],
                        param_dict['complement'],
                        param_dict['postal_code'],
                        param_dict['country']
                    );

                    elem.name = name;
                    elem.value = name;

                    init_data = elem;
                }

                callback(init_data);
            }
            """ % dict(name=self.name))
        self.opts['escapeMarkup'] = twc.js_callback("""
            function(markup) {
                return markup;
            }
            """)
        self.opts['formatResult'] = twc.js_callback("""
            function(location) {
                var markup = '<option value="' + location.value + '">'
                    + location.name
                    + '</option>';
                return markup;
            }
            """)
        self.opts['formatSelection'] = twc.js_callback("""
            function(location) {
                if(typeof location !== "undefined") {
                    return location.value || location.text;
                }
            }
            """)

        self.opts['ajax'] = dict(url='/geocomplete',
                                 dataType='json',
                                 type='POST',
                                 quietMillis=100,
                                 cache=True,
                                 data=twc.js_callback("""
                function(term) {
                    return {address: term};
                }
                """),
                                 results=twc.js_callback("""
                function(data) {
                    var results = [];

                    if ('results' in data) {
                        $.each(data['results'], function(i, v) {
                            var o = {};
                            o.id = JSON.stringify(v);
                            name = format_name(
                                v['name'],
                                v['complement'],
                                v['postal_code'],
                                v['country']
                            );
                            o.name = name;
                            o.value = name;
                            results.push(o);
                        });
                    }

                    return {results: results};
                }
                """))
コード例 #22
0
ファイル: test_js.py プロジェクト: Cito/tw2.core
 def test_js_callback(self):
     eq_(str(js_callback("update_div")), 'update_div')
     eq_(str(js_callback(js_function('foo')(1,2,3))), 'function(){foo(1, 2, 3)}')
コード例 #23
0
ファイル: test_js.py プロジェクト: Cito/tw2.core
 def test_quotes_escape(self):
     f = twc.js_callback("function() { return \"c\"; }")
     json = self.encode({'onLoad': f})
     eq_(json, '{"onLoad": function() { return "c"; }}')
コード例 #24
0
ファイル: test_js.py プロジェクト: lmacken/tw2.core
 def test_js_callback(self):
     eq_(str(js_callback("update_div")), "update_div")
     eq_(str(js_callback(js_function("foo")(1, 2, 3))), "function(){foo(1, 2, 3)}")
コード例 #25
0
ファイル: test_js.py プロジェクト: Cito/tw2.core
 def test_quotes_tripled(self):
     f = twc.js_callback("""function() { return "c"; }""")
     json = self.encode({'onLoad': f})
     eq_(json, '{"onLoad": function() { return "c"; }}')
コード例 #26
0
ファイル: stomp.py プロジェクト: decause/moksha
class StompWidget(twc.Widget):
    callbacks = [
        'onopen', 'onerror', 'onerrorframe', 'onclose', 'onconnectedframe',
        'onmessageframe'
    ]
    resources = [jquery_js, jquery_json_js]
    onopen = twc.Param("onopen callback",
                       default=twc.js_callback('function(){}'))
    onerror = twc.Param("onerror callback",
                        default=twc.js_callback('function(error){}'))
    onclose = twc.Param("onclose callback",
                        default=twc.js_callback('function(c){}'))
    onerrorframe = twc.Param("onerrorframe callback",
                             twc.js_callback('function(f){}'))
    onmessageframe = twc.Param("onmessageframe callback", default='')
    onconnectedframe = twc.Param("onconnectedframe callback", default='')

    engine_name = 'mako'
    template = u"""
      <script type="text/javascript">
        if (typeof TCPSocket == 'undefined') {
            moksha_callbacks = new Object();
            moksha_socket_busy = false;
        }

        ## Register our topic callbacks
        % for topic in topics:
            var topic = "${topic}";
            if (!moksha_callbacks[topic]) {
                moksha_callbacks[topic] = [];
            }
            moksha_callbacks[topic].push(function(json, frame) {
                ${onmessageframe[topic]}
            });
        % endfor

        if (typeof TCPSocket == 'undefined') {
            document.domain = document.domain;
            moksha_socket_busy = true;
            $.getScript("${orbited_url}/static/Orbited.js", function(){
                Orbited.settings.port = ${orbited_port};
                Orbited.settings.hostname = '${orbited_host}';
                Orbited.settings.streaming = true;
                TCPSocket = Orbited.TCPSocket;
                $.getScript("${orbited_url}/static/protocols/stomp/stomp.js", function(){
                    ## Create a new TCPSocket & Stomp client
                    stomp = new STOMPClient();
                    stomp.onopen = ${onopen};
                    stomp.onclose = ${onclose};
                    stomp.onerror = ${onerror};
                    stomp.onerrorframe = ${onerrorframe};
                    stomp.onconnectedframe = function(){ 
                        moksha_socket_busy = false;
                        $('body').triggerHandler('moksha.socket_ready');
                        ${onconnectedframe}
                    };
                    stomp.onmessageframe = function(f){
                        var dest = f.headers.destination;
                        var json = null;
                        try {
                            var json = $.parseJSON(f.body);
                        } catch(err) {
                            moksha.error("Unable to decode JSON message body");
                            moksha.error(msg);
                        }
                        if (moksha_callbacks[dest]) {
                            for (var i=0; i < moksha_callbacks[dest].length; i++) {
                                moksha_callbacks[dest][i](json, f);
                            }
                        }
                    };

                    stomp.connect('${stomp_host}', ${stomp_port},
                                  '${stomp_user}', '${stomp_pass}');
                });
            });

        } else {
            ## Utilize the existing stomp connection
            if (moksha_socket_busy) {
                $('body').bind('moksha.socket_ready', function() {
                    ${onconnectedframe}
                });
            } else {
                ${onconnectedframe}
            }
        }

        window.onbeforeunload = function() {
            if (typeof stomp != 'undefined') {
                stomp.reset();
            }
        }

        if (typeof moksha == 'undefined') {
            moksha = {
                /* Send a STOMP message to a given topic */
                send_message: function(topic, body) {
                    stomp.send($.toJSON(body), topic)
                }
            }
        }

        % if notify:
            $.jGrowl.defaults.position = 'bottom-right';
        % endif
      </script>
    """

    # TODO -- what does this do?
    hidden = twc.Param("Undocumented.  What does this do?", default=True)

    notify = twc.Param("Popup notification bubbles on socket state changes",
                       default=asbool(config.get('moksha.socket.notify',
                                                 False)))
    orbited_host = twc.Param("orbited host",
                             default=config.get('orbited_host', 'localhost'))
    orbited_port = twc.Param("orbited port",
                             default=config.get('orbited_port', 9000))
    orbited_scheme = twc.Param("orbited scheme",
                               default=config.get('orbited_scheme', 'http'))
    orbited_url = twc.Variable("orbited_url", default=None)
    topics = twc.Variable("topics", default=[])

    stomp_host = twc.Param(default=config.get('stomp_host', 'localhost'))
    stomp_port = twc.Param(default=config.get('stomp_port', 61613))
    stomp_user = twc.Param(default=config.get('stomp_user', 'guest'))
    stomp_pass = twc.Param(default=config.get('stomp_pass', 'guest'))

    def prepare(self):
        if not self.orbited_url:
            self.orbited_url = '%s://%s:%s' % (
                self.orbited_scheme, self.orbited_host, self.orbited_port)
        super(StompWidget, self).prepare()
        self.onmessageframe = defaultdict(str)  # {topic: 'js callbacks'}
        for callback in self.callbacks:
            if len(moksha.utils.livewidgets[callback]):
                cbs = ''
                if callback == 'onmessageframe':
                    for topic in moksha.utils.livewidgets[callback]:
                        self.topics.append(topic)
                        for cb in moksha.utils.livewidgets[callback][topic]:
                            self.onmessageframe[topic] += '%s;' % str(cb)
                else:
                    for cb in moksha.utils.livewidgets[callback]:
                        if isinstance(cb, (twc.js_callback, js_function)):
                            cbs += '$(%s);' % str(cb)
                        else:
                            cbs += str(cb)
                if cbs:
                    setattr(self, callback, cbs)

        if self.notify:
            moksha_notify.register_resources()
            openmsg = "Moksha live socket connected"
            self.onopen = twc.js_callback('function() { $.jGrowl("%s") }' %
                                          openmsg)
            errormsg = "Moksha Live Socket Error: "
            self.onerror = twc.js_callback(
                'function(error) { $.jGrowl("%s" + error) }' % errormsg)
            errorframemsg = "Error frame received from Moksha Socket: "
            self.onerrorframe = twc.js_callback(
                'function(f) { $.jGrowl("%s" + f) }' % errorframemsg)
            closemsg = "Moksha Socket Closed"
            self.onclose = twc.js_callback('function(c) { $.jGrowl("%s") }' %
                                           closemsg)
コード例 #27
0
    def prepare(self):
        # put code here to run just before the widget is displayed
        super(CodeMirrorEditor, self).prepare()
        self.safe_modify('resources')

        options = self.default_options.copy()
        if self.options:
            options.update(self.options)

        try:
            (mode, mime) = mode_name(self.mode)
            self.resources.append(codemirror_modes[mode])
            options['mode'] = mime or mode
        except KeyError:
            pass

        if self.keymap:
            try:
                self.resources.append(codemirror_keymaps[self.keymap])
                options['keymap'] = self.keymap
            except KeyError:
                pass

        if self.theme:
            try:
                self.resources.append(codemirror_themes[self.theme])
                options['theme'] = self.theme
            except KeyError:
                pass

        options['lineNumbers'] = bool(self.lineNumbers)

        if self.firstLineNumber:
            options['firstLineNumber'] = self.firstLineNumber

        if self.height_from_rows and self.rows is not None:
            _css = twc.CSSSource(src=u'#%s + .CodeMirror {height: %dem;}' %
                                 (self.compound_id, self.rows))
            self.resources.append(_css)

        if self.fullscreen:
            self.resources.append(codemirror_addons['display']['fullscreen'])
            #TODO: Customizable keys
            self.default_options['extraKeys'] = {
                "F11":
                twc.js_callback(
                    'function(cm) {cm.setOption("fullScreen", !cm.getOption("fullScreen"));}'
                ),
                "Esc":
                twc.js_callback(
                    'function(cm) {if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);}'
                ),
            }
            try:
                _help_text = self.help_text
            except AttributeError:
                _help_text = u''
            self.safe_modify('help_text')
            self.help_text = 'Press F11 when cursor is in the editor to toggle full screen editing. ' \
                             'Esc can also be used to exit full screen editing.' \
                             + Markup('<br />') + (_help_text if _help_text else '')

        if self.placeholder:
            self.resources.append(codemirror_addons['display']['placeholder'])

        self.add_call(
            codemirror_js.fromTextArea(
                twc.js_function('document.getElementById')(self.compound_id),
                options))
コード例 #28
0
ファイル: custom_widgets.py プロジェクト: BenoitEchernier/web
    def __init__(self, **kwargs):
        super(GeocompleteField, self).__init__(**kwargs)
        self.resources = [
            select2_persistence_js,
            twc.JSSource(
                src='''
                function format_name(name, complement, postal_code, country) {
                    var display_name = name;
                    display_name += ' ';

                    if(complement) {
                        display_name += complement;
                    }

                    display_name += ' - ';
                    display_name += postal_code;
                    display_name += ', ';
                    display_name += country;

                    return display_name.toUpperCase();
                }
                '''
            )
        ]
        self.options = []
        self.ondemand = True
        self.validator = self.validator or Validator()

        self.opts.copy()
        self.opts['minimumInputLength'] = 1
        self.opts['maximumInputLength'] = 125
        self.opts['allowClear'] = True
        self.opts['dropdownAutoWidth'] = True

        self.opts['initSelection'] = twc.js_callback(
            """
            function (element, callback) {
                var init_data;

                param = params['%(name)s'];

                if(typeof param !== "undefined" && param) {
                    var elem = {};
                    param_dict = JSON.parse(param);
                    elem.id = param;

                    name = format_name(
                        param_dict['name'],
                        param_dict['complement'],
                        param_dict['postal_code'],
                        param_dict['country']
                    );

                    elem.name = name;
                    elem.value = name;

                    init_data = elem;
                }

                callback(init_data);
            }
            """ % dict(name=self.name)
        )
        self.opts['escapeMarkup'] = twc.js_callback(
            """
            function(markup) {
                return markup;
            }
            """
        )
        self.opts['formatResult'] = twc.js_callback(
            """
            function(location) {
                var markup = '<option value="' + location.value + '">'
                    + location.name
                    + '</option>';
                return markup;
            }
            """
        )
        self.opts['formatSelection'] = twc.js_callback(
            """
            function(location) {
                if(typeof location !== "undefined") {
                    return location.value || location.text;
                }
            }
            """
        )

        self.opts['ajax'] = dict(
            url='/geocomplete',
            dataType='json',
            type='POST',
            quietMillis=100,
            cache=True,
            data=twc.js_callback(
                """
                function(term) {
                    return {address: term};
                }
                """
            ),
            results=twc.js_callback(
                """
                function(data) {
                    var results = [];

                    if ('results' in data) {
                        $.each(data['results'], function(i, v) {
                            var o = {};
                            o.id = JSON.stringify(v);
                            name = format_name(
                                v['name'],
                                v['complement'],
                                v['postal_code'],
                                v['country']
                            );
                            o.name = name;
                            o.value = name;
                            results.push(o);
                        });
                    }

                    return {results: results};
                }
                """
            )
        )