2 * MyPlugin: demonstration plugin
4 * Description: Template for writing new plugins and illustrating the different
5 * possibilities of the plugin API.
6 * This file is part of the Manifold project
7 * Requires: js/plugin.js
8 * URL: http://www.myslice.info
9 * Author: Jordan Augé <jordan.auge@lip6.fr>
10 * Copyright: Copyright 2012-2013 UPMC Sorbonne Universités
16 var SlaDialog = Plugin.extend({
19 * @brief Plugin constructor
20 * @param options : an associative array of setting values
22 * @return : a jQuery collection of objects on which the plugin is
23 * applied, which allows to maintain chainability of calls
25 init: function(options, element) {
26 // for debugging tools
27 this.classname="SlaDialog";
28 // Call the parent constructor, see FAQ when forgotten
29 this._super(options, element);
31 /* Member variables */
35 /* Setup query and record handlers */
37 // Explain this will allow query events to be handled
38 // What happens when we don't define some events ?
39 // Some can be less efficient
40 this.listen_query(options.query_uuid);
42 /* GUI setup and event binding */
47 find_row: function(key)
49 // key in third position, column id = 2
52 var cols = $.grep(this.table.fnSettings().aoData, function(col) {
53 return (col._aData[KEY_POS] == key);
59 throw "Too many same-key rows in ResourceSelected plugin";
65 // on_show like in querytable
70 uncheck: function(urn)
72 $('#slamodal').on('hidden.bs.modal', function(e){
73 $('#' + (urn).replace(/"/g,'')).click();
74 console.log('#' + (data.value).replace(/"/g,''));
78 // a function to bind events here: click change
79 // how to raise manifold events
80 set_state: function(data, username)
85 var username = username;
89 switch(data.request) {
90 case FIELD_REQUEST_ADD_RESET:
91 case FIELD_REQUEST_REMOVE_RESET:
92 $('#sla_dialog').hide();
93 // find line and delete it
94 // row = this.find_row(data.value);
96 // this.table.fnDeleteRow(row.nTr);
97 // $("#badge-pending").data('number', $("#badge-pending").data('number') - 1 );
98 // $("#badge-pending").text($("#badge-pending").data('number'));
100 case FIELD_REQUEST_CHANGE:
103 case FIELD_REQUEST_ADD:
106 if (data.value.toLowerCase().indexOf("iminds") >= 0){
108 $('#sla_dialog').show();
109 $('#slamodal').modal('show');
111 $(document).ready(function() {
112 $("#accept_sla").click(function(){
113 console.log("SLA ACCEPTED");
114 console.log("With username: " + username);
115 $.post("/sla/agreements/simplecreate", {"template_id":"iMindsServiceTemplate","user":username});
116 $('#slamodal').modal('hide');
120 $(document).ready(function() {
121 $("#dismiss_sla").click(function(){
122 console.log("SLA NOT ACCEPTED");
123 // FIX ME: This is not a good solution to prevent the checkbox click
124 var chkbox = document.getElementById((data.value).replace(/"/g,''));
128 $('#slamodal').modal('hide');
136 case FIELD_REQUEST_REMOVE:
142 post_agreement: function()
144 console.log(this.options.user);
147 /* GUI MANIPULATION */
149 // We advise you to write function to change behaviour of the GUI
150 // Will use naming helpers to access content _inside_ the plugin
151 // always refer to these functions in the remaining of the code
153 show_hide_button: function()
155 // this.id, this.el, this.cl, this.elts
156 // same output as a jquery selector with some guarantees
161 // see in the html template
162 // How to load a template, use of mustache
166 // How to make sure the plugin is not desynchronized
167 // He should manifest its interest in filters, fields or records
168 // functions triggered only if the proper listen is done
172 on_filter_added: function(filter)
177 on_field_state_changed: function(result)
179 console.log("triggered state_changed: "+result);
180 // this.set_state(result, this.options.username);
183 // ... be sure to list all events here
185 /* RECORD HANDLERS */
186 on_all_new_record: function(record)
191 on_new_record: function(record)
196 /* INTERNAL FUNCTIONS */
198 // only convention, not strictly enforced at the moment
203 /* Plugin registration */
204 $.plugin('SlaDialog', SlaDialog);
206 // TODO Here use cases for instanciating plugins in different ways like in the pastie.