[xwiki-users] javascript App Within Minutes
App Within Minutes creates a nice "Add record" button. After clicking the button a dialog is presented asking for input that is used to create a new documentname. This is (more or less, since i modified it slightly) the Java script that is added to the sheet by the app-within-minutes generator. My question is due to fact that i'm not a javascript expert, so solution might be very simple: I would like to generate the documentname based on user that is clicking the button If user in group X then input will be pre populated with 'Full Name" of that user and popup will not allow user to change this value; Confirmation would be like "New Question will be made for: [[Gerritjan Koekkoek]] and user can only proceed or cancel If user in group y the same behaviour; but now the inputbox would need to be open for change Confirmation would be like "New Question will be made for: [[Gerritjan Koekkoek]] but now user can change the input to 'Andree Benz' meaning that new question is posted by Gerritjan Koekkoek on behalf of Andree Benz. How would you suggest to change below script to get the desired effect? (see lineindicator ==> of what I thought would be a solution? var XWiki = (function (XWiki) { XWiki.EntryNamePopup = Class.create(XWiki.widgets.ModalPopup, { initialize : function($super, trigger) { trigger.observe('click', this.showDialog.bindAsEventListener(this)); this.urlTemplate = trigger.up().next('input[type=hidden]').value; this.input = new Element('input', {type: 'text'}); this.addButton = new Element('input', {type: 'image', src: '$xwiki.getSkinFile('icons/silk/add.png')', alt: '$escapetool.javascript($msg.get('cdlsateprivat.CreateNewQuestionAltText'))'}); var container = new Element('div', {id: 'entryNamePopup'}); container.insert(this.input); container.insert(this.addButton); $super(container, { show: {method: this.showDialog, keys: []}, add: {method: this._onAdd, keys: ['Enter']} }, { title: '$escapetool.javascript($msg.get('cdlsateprivat.CreateNewQuestionTitle'))', verticalPosition: 'top' }); }, createDialog : function($super, event) { this.input.observe this.addButton.observe('click', this._onAdd.bind(this)); $super(event); }, showDialog : function($super, event) { $super(event); ==> $this.input.val() == 'Gerritjan Koekkoek' //this line did not work, how can I get it prepopulated (or suggested) with preferably XWiki variable this.input.clear().focus(); }, _onAdd : function() { if (this.input.value != '') { window.self.location = this.urlTemplate.replace('__entryName__', encodeURIComponent(this.input.value)); } else { this.input.focus(); } } }); function init() { var actionBox = $('actionBox'); if(actionBox) { new XWiki.EntryNamePopup(actionBox.down('.add')); return true; } return false; } (XWiki.domIsLoaded && init()) || document.observe('xwiki:dom:loaded', init); return XWiki; }(XWiki || {}));
Here's what I did: (1) In the sheet (you probably customized AppWithinMinutes.LiveTableViewSheet) I added another hidden input besides the one holding the URL template {{html}} <input type="hidden" value="$xwiki.getURL($entryDoc, 'edit', "editor=inline&template=$!templateName&parent=WebHome")" /> <input type="hidden" name="entryName" value="put here what you want" #if($condition)readonly="readonly"#end /> {{/html}} (2) In the JSX I replaced this.input = new Element('input', {type: 'text'}); with this.input = trigger.up().next('input[name=entryName]'); this.input.type = 'text'; this.input.defaultValue = this.input.value; and then this.input.clear().focus(); with this.input.value = this.input.defaultValue; this.input.focus(); This way you control the entry name text input from the Velocity. Hope this helps, Marius On Mon, Jun 11, 2012 at 3:28 PM, Gerritjan Koekkoek <[email protected]> wrote:
App Within Minutes creates a nice "Add record" button. After clicking the button a dialog is presented asking for input that is used to create a new documentname.
This is (more or less, since i modified it slightly) the Java script that is added to the sheet by the app-within-minutes generator. My question is due to fact that i'm not a javascript expert, so solution might be very simple: I would like to generate the documentname based on user that is clicking the button If user in group X then input will be pre populated with 'Full Name" of that user and popup will not allow user to change this value; Confirmation would be like "New Question will be made for: [[Gerritjan Koekkoek]] and user can only proceed or cancel If user in group y the same behaviour; but now the inputbox would need to be open for change Confirmation would be like "New Question will be made for: [[Gerritjan Koekkoek]] but now user can change the input to 'Andree Benz' meaning that new question is posted by Gerritjan Koekkoek on behalf of Andree Benz. How would you suggest to change below script to get the desired effect? (see lineindicator ==> of what I thought would be a solution?
var XWiki = (function (XWiki) {
XWiki.EntryNamePopup = Class.create(XWiki.widgets.ModalPopup, { initialize : function($super, trigger) { trigger.observe('click', this.showDialog.bindAsEventListener(this)); this.urlTemplate = trigger.up().next('input[type=hidden]').value;
this.input = new Element('input', {type: 'text'}); this.addButton = new Element('input', {type: 'image', src: '$xwiki.getSkinFile('icons/silk/add.png')', alt: '$escapetool.javascript($msg.get('cdlsateprivat.CreateNewQuestionAltText'))'});
var container = new Element('div', {id: 'entryNamePopup'}); container.insert(this.input); container.insert(this.addButton);
$super(container, { show: {method: this.showDialog, keys: []}, add: {method: this._onAdd, keys: ['Enter']} }, { title: '$escapetool.javascript($msg.get('cdlsateprivat.CreateNewQuestionTitle'))', verticalPosition: 'top' }); }, createDialog : function($super, event) { this.input.observe this.addButton.observe('click', this._onAdd.bind(this)); $super(event); }, showDialog : function($super, event) { $super(event); ==> $this.input.val() == 'Gerritjan Koekkoek' //this line did not work, how can I get it prepopulated (or suggested) with preferably XWiki variable this.input.clear().focus(); }, _onAdd : function() { if (this.input.value != '') { window.self.location = this.urlTemplate.replace('__entryName__', encodeURIComponent(this.input.value)); } else { this.input.focus(); } } });
function init() { var actionBox = $('actionBox'); if(actionBox) { new XWiki.EntryNamePopup(actionBox.down('.add')); return true; } return false; } (XWiki.domIsLoaded && init()) || document.observe('xwiki:dom:loaded', init);
return XWiki; }(XWiki || {})); _______________________________________________ users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
HI, This works very well, thanks and actually is better like you said to manage more from velocity. Gerritjan Op 11 jun. 2012, om 16:14 heeft Marius Dumitru Florea het volgende geschreven:
Here's what I did:
(1) In the sheet (you probably customized AppWithinMinutes.LiveTableViewSheet) I added another hidden input besides the one holding the URL template
{{html}} <input type="hidden" value="$xwiki.getURL($entryDoc, 'edit', "editor=inline&template=$!templateName&parent=WebHome")" /> <input type="hidden" name="entryName" value="put here what you want" #if($condition)readonly="readonly"#end /> {{/html}}
(2) In the JSX I replaced
this.input = new Element('input', {type: 'text'});
with
this.input = trigger.up().next('input[name=entryName]'); this.input.type = 'text'; this.input.defaultValue = this.input.value;
and then
this.input.clear().focus();
with
this.input.value = this.input.defaultValue; this.input.focus();
This way you control the entry name text input from the Velocity.
Hope this helps, Marius
On Mon, Jun 11, 2012 at 3:28 PM, Gerritjan Koekkoek <[email protected]> wrote:
App Within Minutes creates a nice "Add record" button. After clicking the button a dialog is presented asking for input that is used to create a new documentname.
This is (more or less, since i modified it slightly) the Java script that is added to the sheet by the app-within-minutes generator. My question is due to fact that i'm not a javascript expert, so solution might be very simple: I would like to generate the documentname based on user that is clicking the button If user in group X then input will be pre populated with 'Full Name" of that user and popup will not allow user to change this value; Confirmation would be like "New Question will be made for: [[Gerritjan Koekkoek]] and user can only proceed or cancel If user in group y the same behaviour; but now the inputbox would need to be open for change Confirmation would be like "New Question will be made for: [[Gerritjan Koekkoek]] but now user can change the input to 'Andree Benz' meaning that new question is posted by Gerritjan Koekkoek on behalf of Andree Benz. How would you suggest to change below script to get the desired effect? (see lineindicator ==> of what I thought would be a solution?
var XWiki = (function (XWiki) {
XWiki.EntryNamePopup = Class.create(XWiki.widgets.ModalPopup, { initialize : function($super, trigger) { trigger.observe('click', this.showDialog.bindAsEventListener(this)); this.urlTemplate = trigger.up().next('input[type=hidden]').value;
this.input = new Element('input', {type: 'text'}); this.addButton = new Element('input', {type: 'image', src: '$xwiki.getSkinFile('icons/silk/add.png')', alt: '$escapetool.javascript($msg.get('cdlsateprivat.CreateNewQuestionAltText'))'});
var container = new Element('div', {id: 'entryNamePopup'}); container.insert(this.input); container.insert(this.addButton);
$super(container, { show: {method: this.showDialog, keys: []}, add: {method: this._onAdd, keys: ['Enter']} }, { title: '$escapetool.javascript($msg.get('cdlsateprivat.CreateNewQuestionTitle'))', verticalPosition: 'top' }); }, createDialog : function($super, event) { this.input.observe this.addButton.observe('click', this._onAdd.bind(this)); $super(event); }, showDialog : function($super, event) { $super(event); ==> $this.input.val() == 'Gerritjan Koekkoek' //this line did not work, how can I get it prepopulated (or suggested) with preferably XWiki variable this.input.clear().focus(); }, _onAdd : function() { if (this.input.value != '') { window.self.location = this.urlTemplate.replace('__entryName__', encodeURIComponent(this.input.value)); } else { this.input.focus(); } } });
function init() { var actionBox = $('actionBox'); if(actionBox) { new XWiki.EntryNamePopup(actionBox.down('.add')); return true; } return false; } (XWiki.domIsLoaded && init()) || document.observe('xwiki:dom:loaded', init);
return XWiki; }(XWiki || {})); _______________________________________________ users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
participants (3)
-
Gerritjan Koekkoek -
Marius Dumitru Florea -
Vereniging CdLS