MDL-30899 moodle-core-notification Adding focus to non modal windows
[moodle.git] / filter / glossary / yui / autolinker / autolinker.js
1 YUI.add('moodle-filter_glossary-autolinker', function(Y) {
3     var AUTOLINKERNAME = 'Glossary filter autolinker',
4         URL = 'url',
5         POPUPNAME = 'name',
6         POPUPOPTIONS = 'options',
7         TITLE = 'title',
8         WIDTH = 'width',
9         HEIGHT = 'height',
10         MENUBAR = 'menubar',
11         LOCATION = 'location',
12         SCROLLBARS = 'scrollbars',
13         RESIZEABLE = 'resizable',
14         TOOLBAR = 'toolbar',
15         STATUS = 'status',
16         DIRECTORIES = 'directories',
17         FULLSCREEN = 'fullscreen',
18         DEPENDENT = 'dependent';
20     var AUTOLINKER = function() {
21         AUTOLINKER.superclass.constructor.apply(this, arguments);
22     };
23     Y.extend(AUTOLINKER, Y.Base, {
24         overlay : null,
25         initializer : function(config) {
26             var popupname = this.get(POPUPNAME),
27                 popupoptions = this.get(POPUPOPTIONS),
28                 self = this;
29             Y.delegate('click', function(e){
31                 e.preventDefault();
33                 //display a progress indicator
34                 var title = '';
35                 var content = Y.Node.create('<div id="glossaryfilteroverlayprogress"><img src="'+M.cfg.loadingicon+'" class="spinner" /></div>');
36                 var o = new Y.Overlay({
37                     headerContent :  title,
38                     bodyContent : content
39                 });
40                 self.overlay = o;
41                 o.render(Y.one(document.body));
43                 //Switch over to the ajax url and fetch the glossary item
44                 var fullurl = this.getAttribute('href').replace('showentry.php','showentry_ajax.php');
45                 var cfg = {
46                     method: 'get',
47                     context : self,
48                     on: {
49                         success: function(id, o, node) {
50                             this.display_callback(o.responseText);
51                         },
52                         failure: function(id, o, node) {
53                             var debuginfo = o.statusText;
54                             if (M.cfg.developerdebug) {
55                                 o.statusText += ' (' + fullurl + ')';
56                             }
57                             this.display_callback('bodyContent',debuginfo);
58                         }
59                     }
60                 };
61                 Y.io(fullurl, cfg);
63             }, Y.one(document.body), 'a.glossary.autolink.concept');
64         },
65         display_callback : function(content) {
66             try {
67                 var data = Y.JSON.parse(content);
68                 if (data.success){
69                     this.overlay.hide(); //hide progress indicator
71                     for (key in data.entries) {
72                         definition = data.entries[key].definition + data.entries[key].attachments
73                         var alertpanel = new M.core.alert({title:data.entries[key].concept, message:definition, lightbox:false});
74                         Y.Node.one('#id_yuialertconfirm-' + alertpanel.COUNT).focus();
75                     }
77                     return true;
78                 } else if (data.error) {
79                     new M.core.ajaxException(data);
80                 }
81             }catch(e) {
82                 new M.core.exception(e);
83             }
84             return false;
85         }
86     }, {
87         NAME : AUTOLINKERNAME,
88         ATTRS : {
89             url : {
90                 validator : Y.Lang.isString,
91                 value : M.cfg.wwwroot+'/mod/glossary/showentry.php'
92             },
93             name : {
94                 validator : Y.Lang.isString,
95                 value : 'glossaryconcept'
96             },
97             options : {
98                 getter : function(val) {
99                     return {
100                         width : this.get(WIDTH),
101                         height : this.get(HEIGHT),
102                         menubar : this.get(MENUBAR),
103                         location : this.get(LOCATION),
104                         scrollbars : this.get(SCROLLBARS),
105                         resizable : this.get(RESIZEABLE),
106                         toolbar : this.get(TOOLBAR),
107                         status : this.get(STATUS),
108                         directories : this.get(DIRECTORIES),
109                         fullscreen : this.get(FULLSCREEN),
110                         dependent : this.get(DEPENDENT)
111                     }
112                 },
113                 readOnly : true
114             },
115             width : {value : 600},
116             height : {value : 450},
117             menubar : {value : false},
118             location : {value : false},
119             scrollbars : {value : true},
120             resizable : {value : true},
121             toolbar : {value : true},
122             status : {value : true},
123             directories : {value : false},
124             fullscreen : {value : false},
125             dependent : {value : true}
126         }
127     });
129     M.filter_glossary = M.filter_glossary || {};
130     M.filter_glossary.init_filter_autolinking = function(config) {
131         return new AUTOLINKER(config);
132     }
134 }, '@VERSION@', {requires:['base','node','io-base','json-parse','event-delegate','overlay','moodle-core-notification']});