Changes for page LiveTable View Sheet
Last modified by Mark Kohlmann on 2025/01/19 06:47
From version 2.1
edited by Mark Kohlmann
on 2020/04/03 03:53
on 2020/04/03 03:53
Change comment:
Install extension [org.xwiki.platform:xwiki-platform-appwithinminutes-ui/12.2]
To version 1.1
edited by Mark Kohlmann
on 2020/04/02 23:25
on 2020/04/02 23:25
Change comment:
Install extension [org.xwiki.platform:xwiki-platform-appwithinminutes-ui-9.4]
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Objects (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,15 +1,99 @@ 1 -{{ template name="locationPicker_macros.vm" /}}2 - 3 - {{velocity output="false"}}4 -# macro(displayApp)5 - #set 6 - #set , {'currentApp': $doc.getDocumentReference()}))1 +{{velocity}} 2 +#set($liveTableObj = $doc.getObject('AppWithinMinutes.LiveTableClass')) 3 +#if($liveTableObj) 4 + #set($discard = $doc.use($liveTableObj)) 5 + #set($discard = $xwiki.ssx.use('AppWithinMinutes.LiveTableViewSheet')) 6 + #set($discard = $xwiki.jsx.use('AppWithinMinutes.LiveTableViewSheet')) 7 7 #if (!$isReadOnly) 8 - #displayAppActions 8 + ## Determine the user's rights 9 + #set($classFullName = $liveTableObj.getProperty('class').value) 10 + #set($className = $stringtool.removeEnd($classFullName, 'Class')) 11 + #set ($templateProviderReference = $services.model.resolveDocument("${className}TemplateProvider")) 12 + #set ($creationRestrictions = $xwiki.getDocument($templateProviderReference).getValue('creationRestrictions')) 13 + #if ($creationRestrictions) 14 + #if ($creationRestrictions.size() > 0) 15 + #set ($dataSpaceRef = $services.model.resolveSpace($creationRestrictions.get(0))) 16 + #else 17 + ## There is no data space as the user can create application entries anywhere. Let's use the application space 18 + ## when the user clicks on the Add New Entry link from the home page. 19 + #set ($dataSpaceRef = $doc.documentReference.parent) 20 + #end 21 + #else 22 + ## The template provider is missing. Fall-back on the old 'dataSpace' property. 23 + #set ($dataSpaceRef = $services.model.resolveSpace($liveTableObj.getValue('dataSpace'), 'explicit', 24 + $doc.documentReference)) 25 + #end 26 + #set($hasCreateData = $services.security.authorization.hasAccess('edit', $dataSpaceRef)) 27 + #set($hasDeleteData = $services.security.authorization.hasAccess('admin', $dataSpaceRef)) 28 + #set($classRef = $services.model.resolveDocument($classFullName)) 29 + #set($hasEditApplication = $services.security.authorization.hasAccess('edit', $classRef)) 30 + #set($translationsRef = $services.model.resolveDocument("${className}Translations")) 31 + #set($hasEditTranslations = $xwiki.isMultiLingual() && $xwiki.exists($translationsRef) 32 + && $services.security.authorization.hasAccess('edit', $translationsRef)) 33 + #set($hasDeleteApplication = $hasDeleteData 34 + && $services.security.authorization.hasAccess('admin', $doc.documentReference.parent) 35 + && $services.security.authorization.hasAccess('admin', $classRef.parent)) 36 + ## Display the application actions based on the user's rights 37 + #if($hasCreateData || $hasDeleteData || $hasEditApplication || $hasEditTranslations || $hasDeleteApplication) 38 + (% id="actionBox" class="floatinginfobox" %) 39 + ((( 40 + = $services.localization.render('platform.appwithinminutes.appHomePageActionsHeading') = 41 + #if($hasCreateData) 42 + * [[$services.localization.render('platform.appwithinminutes.appHomePageAddEntryHint')>>||anchor="AddNewEntry" class="action add"]]## 43 + #set($entryDoc = $services.model.resolveDocument('__entryName__', 'explicit', $dataSpaceRef)) 44 + ## We need to set the title if we want to be able to sort or filter the doc.title live table column. 45 + #set ($params = { 46 + 'template': "${className}Template", 47 + 'title': '__entryName__', 48 + 'parent': $services.model.serialize($doc.documentReference, 'local') 49 + }) 50 + #if ($xwiki.getDocument($classRef).xWikiClass.properties.size() > 0) 51 + ## The entry has properties so go in edit mode to edit them. 52 + #set ($action = 'edit') 53 + #set ($params.editor = 'inline') 54 + #else 55 + ## There are no properties to edit so create the new entry and get back to the home page. 56 + #set ($action = 'save') 57 + #set ($discard = $params.putAll({ 58 + 'xredirect': $doc.getURL(), 59 + 'form_token': $services.csrf.token 60 + })) 61 + #end 62 + {{html}}<input type="hidden" value="$xwiki.getURL($entryDoc, $action, $escapetool.url($params))" />{{/html}} 63 + #end 64 + #if($hasEditApplication) 65 + #set ($queryString = $escapetool.url({ 66 + 'appName': $doc.space, 67 + 'resolve': true 68 + })) 69 + * [[$services.localization.render('platform.appwithinminutes.appHomePageEditAppLabel')>>AppWithinMinutes.CreateApplication||queryString="$queryString" class="action edit"]] 70 + #end 71 + #if($hasEditTranslations) 72 + * [[$services.localization.render('platform.appwithinminutes.appHomePageTranslateAppLabel')>>path:$xwiki.getURL($translationsRef, 'edit', 'editor=wiki')||class="action translate"]] 73 + #end 74 + #if($hasDeleteData) 75 + #set ($deleteDataURL = $xwiki.getURL('AppWithinMinutes.DeleteApplication', 'view', $escapetool.url({ 76 + 'appName': $doc.space, 77 + 'resolve': true, 78 + 'scope': 'entries', 79 + 'xredirect': $doc.getURL() 80 + }))) 81 + * [[$services.localization.render('platform.appwithinminutes.appHomePageDeleteEntriesLabel')>>path:$deleteDataURL||class="action deleteData"]] 82 + #end 83 + #if($hasDeleteApplication) 84 + #set ($deleteAppURL = $xwiki.getURL('AppWithinMinutes.DeleteApplication', 'view', $escapetool.url({ 85 + 'appName': $doc.space, 86 + 'resolve': true, 87 + 'xredirect': $doc.getURL() 88 + }))) 89 + * [[$services.localization.render('platform.appwithinminutes.appHomePageDeleteAppLabel')>>path:$deleteAppURL||class="action delete"]] 90 + #end 91 + ))) 92 + #end 9 9 #end 10 10 $doc.display('description') 11 11 ## Display the live table only if it was generated. 12 - #if 96 + #if($doc.content.length() > 0) 13 13 = $services.localization.render('platform.appwithinminutes.appLiveTableHeading') = 14 14 ## We don't use the Include macro (with empty reference) because we want the content to be executed with the rights 15 15 ## of the current document rather than the rights of the sheet. This is important because the user can modify the ... ... @@ -23,195 +23,4 @@ 23 23 $doc.syntax.toIdString()).replace('{{', '&#123;&#123;'){{/html}} 24 24 #end 25 25 #end 26 - 27 -#macro (displayAppActions) 28 - ## Determine the user's rights 29 - #set ($className = $stringtool.removeEnd($classFullName, 'Class')) 30 - #set ($templateProviderReference = $services.model.resolveDocument("${className}TemplateProvider")) 31 - #set ($templateProvider = $xwiki.getDocument($templateProviderReference)) 32 - #set ($creationRestrictions = $templateProvider.getValue('creationRestrictions')) 33 - #if ($creationRestrictions) 34 - #if ($creationRestrictions.size() > 0) 35 - #set ($dataSpaceRef = $services.model.resolveSpace($creationRestrictions.get(0))) 36 - #else 37 - ## There is no data space as the user can create application entries anywhere. Let's use the application space 38 - ## when the user clicks on the Add New Entry link from the home page. 39 - #set ($dataSpaceRef = $doc.documentReference.parent) 40 - #end 41 - #else 42 - ## The template provider is missing. Fall-back on the old 'dataSpace' property. 43 - #set ($dataSpaceRef = $services.model.resolveSpace($doc.getValue('dataSpace'), 'explicit', 44 - $doc.documentReference)) 45 - #end 46 - #set ($hasCreateData = $services.security.authorization.hasAccess('edit', $dataSpaceRef)) 47 - #set ($hasDeleteData = $services.security.authorization.hasAccess('admin', $dataSpaceRef)) 48 - #set ($translationsRef = $services.model.resolveDocument("${className}Translations")) 49 - #set ($hasEditTranslations = $xwiki.isMultiLingual() && $xwiki.exists($translationsRef) 50 - && $services.security.authorization.hasAccess('edit', $translationsRef)) 51 - #set ($classRef = $services.model.resolveDocument($classFullName)) 52 - #set ($hasEditApplication = $services.security.authorization.hasAccess('edit', $classRef)) 53 - #set ($hasDeleteApplication = $hasDeleteData 54 - && $services.security.authorization.hasAccess('admin', $doc.documentReference.parent) 55 - && $services.security.authorization.hasAccess('admin', $classRef.parent)) 56 - ## Display the application actions based on the user's rights 57 - #if ($hasCreateData || $hasDeleteData || $hasEditApplication || $hasEditTranslations || $hasDeleteApplication) 58 - (% id="actionBox" class="floatinginfobox" %) 59 - ((( 60 - = $services.localization.render('platform.appwithinminutes.appHomePageActionsHeading') = 61 - #if ($hasCreateData) 62 - * [[$services.localization.render('platform.appwithinminutes.appHomePageAddEntryHint')>>||anchor="AddNewEntry" class="action add"]]## 63 - #if ("$!templateProvider.getValue('terminal')" == '1') 64 - #set ($entryReference = $services.model.createDocumentReference('__entryName__', $dataSpaceRef)) 65 - #else 66 - #set ($entryReference = $services.model.resolveDocument('', 'default', 67 - $services.model.createSpaceReference('__entryName__', $dataSpaceRef))) 68 - #end 69 - ## We need to set the title if we want to be able to sort or filter the doc.title live table column. 70 - #set ($params = { 71 - 'template': "${className}Template", 72 - 'title': '__entryName__', 73 - 'parent': $services.model.serialize($doc.documentReference, 'local') 74 - }) 75 - #if ($xwiki.getDocument($classRef).xWikiClass.properties.size() > 0) 76 - ## The entry has properties so go in edit mode to edit them. 77 - #set ($action = 'edit') 78 - #set ($params.editor = 'inline') 79 - #else 80 - ## There are no properties to edit so create the new entry and get back to the home page. 81 - #set ($action = 'save') 82 - #set ($discard = $params.putAll({ 83 - 'xredirect': $doc.getURL(), 84 - 'form_token': $services.csrf.token 85 - })) 86 - #end 87 - {{html}}<input type="hidden" value="$xwiki.getURL($entryReference, $action, $escapetool.url($params))" />{{/html}} 88 - #end 89 - #if ($hasEditApplication) 90 - #set ($queryString = $escapetool.url({ 91 - 'appName': $doc.space, 92 - 'resolve': true 93 - })) 94 - * [[$services.localization.render('platform.appwithinminutes.appHomePageEditAppLabel')>>AppWithinMinutes.CreateApplication||queryString="$queryString" class="action edit"]] 95 - #end 96 - #if ($hasEditTranslations) 97 - * [[$services.localization.render('platform.appwithinminutes.appHomePageTranslateAppLabel')>>path:${xwiki.getURL($translationsRef, 'edit', 'editor=wiki')}||class="action translate"]] 98 - #end 99 - #if ($hasDeleteData) 100 - #set ($deleteDataURL = $xwiki.getURL('AppWithinMinutes.DeleteApplication', 'view', $escapetool.url({ 101 - 'appName': $doc.space, 102 - 'resolve': true, 103 - 'scope': 'entries', 104 - 'xredirect': $doc.getURL() 105 - }))) 106 - * [[$services.localization.render('platform.appwithinminutes.appHomePageDeleteEntriesLabel')>>path:${deleteDataURL}||class="action deleteData"]] 107 - #end 108 - #if ($hasDeleteApplication) 109 - #set ($deleteAppURL = $xwiki.getURL('AppWithinMinutes.DeleteApplication', 'view', $escapetool.url({ 110 - 'appName': $doc.space, 111 - 'resolve': true, 112 - 'xredirect': $doc.getURL() 113 - }))) 114 - * [[$services.localization.render('platform.appwithinminutes.appHomePageDeleteAppLabel')>>path:${deleteAppURL}||class="action delete"]] 115 - #end 116 - ))) 117 - #end 118 -#end 119 - 120 -#macro (renameAppModal) 121 - <div class="modal" id="renameAppModal" tabindex="-1" role="dialog" aria-labelledby="renameAppModal-label" 122 - data-backdrop="static" data-keyboard="false"> 123 - <div class="modal-dialog" role="document"> 124 - <form class="modal-content xform"> 125 - <div class="modal-header"> 126 - <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 127 - <span aria-hidden="true">×</span> 128 - </button> 129 - <span class="modal-title" id="renameAppModal-label">Rename Application</span> 130 - </div> 131 - <div class="modal-body"> 132 - #renameAppModalBody 133 - </div> 134 - <div class="modal-footer"> 135 - <button type="button" class="btn btn-default" data-dismiss="modal"> 136 - $escapetool.xml($services.localization.render('cancel')) 137 - </button> 138 - <button type="submit" class="btn btn-primary" disabled="disabled"> 139 - $escapetool.xml($services.localization.render('core.rename.submit')) 140 - </button> 141 - </div> 142 - </form> 143 - </div> 144 - </div> 145 -#end 146 - 147 -#macro (renameAppModalBody) 148 - <div class="box infomessage"> 149 - $services.icon.renderHTML('info') 150 - $services.localization.render('appWithinMinutes.renameApp.changeAppTitleInfo') 151 - </div> 152 - <div class="box warningmessage"> 153 - $services.icon.renderHTML('warning') 154 - $services.localization.render('appWithinMinutes.renameApp.regenerateAppCodeWarning') 155 - </div> 156 - <div class="hidden"> 157 - <input type="hidden" name="form_token" value="$!escapetool.xml($services.csrf.token)" /> 158 - <input type="hidden" name="oldAppReference" value="$escapetool.xml( 159 - $services.model.serialize($doc.documentReference.parent, 'local'))"/> 160 - <span class="appNameEmptyError xErrorMsg"> 161 - $services.localization.render("platform.appwithinminutes.appNameEmptyError") 162 - </span> 163 - <span class="pageExistsError xErrorMsg"> 164 - $services.localization.render("appWithinMinutes.renameApp.pageExistsError") 165 - </span> 166 - <span class="locationForbiddenError xErrorMsg"> 167 - $services.localization.render("appWithinMinutes.renameApp.locationForbiddenError") 168 - </span> 169 - </div> 170 - #set ($appName = $doc.pageReference.name) 171 - #set ($isNestedPage = $doc.documentReference.name == $services.model.getEntityReference('DOCUMENT', 'default').name) 172 - #set ($parentReference = $doc.documentReference.parent) 173 - #if ($isNestedPage) 174 - #set ($parentReference = $parentReference.parent) 175 - #end 176 - #locationPicker({ 177 - 'id': 'renameApp', 178 - 'title': { 179 - 'label': 'appWithinMinutes.renameApp.newName.label', 180 - 'hint': 'platform.appwithinminutes.appNameHint', 181 - 'name': 'newAppName', 182 - 'value': $appName, 183 - 'placeholder': 'appWithinMinutes.renameApp.newName.label' 184 - }, 185 - 'preview': { 186 - 'label': 'appWithinMinutes.renameApp.location.label', 187 - 'hint': 'appWithinMinutes.renameApp.location.hint' 188 - }, 189 - 'parent': { 190 - 'label': 'appWithinMinutes.renameApp.parent.label', 191 - 'hint': 'appWithinMinutes.renameApp.parent.hint', 192 - 'name': 'newAppParentReference', 193 - 'reference': $parentReference, 194 - 'placeholder': 'appWithinMinutes.createApp.parent.placeholder' 195 - } 196 - }) 197 -#end 198 198 {{/velocity}} 199 - 200 -{{velocity}} 201 -#set ($liveTableObj = $doc.getObject('AppWithinMinutes.LiveTableClass')) 202 -#if ($liveTableObj) 203 - #set ($discard = $doc.use($liveTableObj)) 204 - #set ($classFullName = $doc.getValue('class')) 205 - #if ("$!classFullName" == '' || !$xwiki.exists($classFullName)) 206 - {{warning}} 207 - $services.icon.render('warning') {{translation key="platform.appwithinminutes.appHomePageMovedWarning"/}} 208 - {{/warning}} 209 - 210 - #end 211 - #displayApp() 212 - 213 - {{html clean="false"}} 214 - #renameAppModal() 215 - {{/html}} 216 -#end 217 -{{/velocity}}
- XWiki.JavaScriptExtension[0]
-
- Code
-
... ... @@ -6,11 +6,7 @@ 6 6 this.urlTemplate = trigger.up().next('input[type=hidden]').value; 7 7 8 8 this.input = new Element('input', {type: 'text'}); 9 - this.addButton = new Element('input', { 10 - type: 'image', 11 - src: '$xwiki.getSkinFile('icons/silk/add.png')', 12 - alt: '$escapetool.javascript($services.localization.render('platform.appwithinminutes.appHomePageAddEntryLabel'))' 13 - }); 9 + this.addButton = new Element('input', {type: 'image', src: '$xwiki.getSkinFile('icons/silk/add.png')', alt: '$escapetool.javascript($services.localization.render('platform.appwithinminutes.appHomePageAddEntryLabel'))'}); 14 14 15 15 var container = new Element('div', {id: 'entryNamePopup'}); 16 16 container.insert(this.input); ... ... @@ -54,189 +54,3 @@ 54 54 55 55 return XWiki; 56 56 }(XWiki || {})); 57 - 58 -/** 59 - * Rename Application 60 - */ 61 -require(['jquery', 'bootstrap'], function($) { 62 - #set ($currentDocReference = $xwiki.getDocument($request.currentApp).getDocumentReference()) 63 - // if we cannot find any extension related to this page app, it's not part of an extension. 64 - var isNotAnExtension = $services.extension.xar.getInstalledExtensions($currentDocReference).isEmpty(); 65 - 66 - // double negation! if it's an extension, we stop there: we don't want to add custom AWM rename capabilities 67 - if (!isNotAnExtension) { 68 - return; 69 - } 70 - // Hijack the rename page action. 71 - var renameAppModal = $('#renameAppModal'); 72 - $('#tmActionRename').click(function(event) { 73 - event.preventDefault(); 74 - renameAppModal.modal(); 75 - }); 76 - 77 - // Form validation. 78 - var appNameInput = $('#renameAppTitle'); 79 - var appParentInput = $('#renameAppParentReference'); 80 - var submitButton = renameAppModal.find('.btn-primary[type="submit"]'); 81 - 82 - var appNameEmptyError = renameAppModal.find('.appNameEmptyError'); 83 - var pageExistsError = renameAppModal.find('.pageExistsError'); 84 - var locationForbiddenError = renameAppModal.find('.locationForbiddenError'); 85 - appNameEmptyError.add(pageExistsError).add(locationForbiddenError).hide().insertAfter(appNameInput); 86 - 87 - var getNewAppReference = function(local) { 88 - var appParentReference = local ? null : new XWiki.WikiReference(XWiki.currentWiki); 89 - if (appParentInput.val() !== '') { 90 - appParentReference = XWiki.Model.resolve(appParentInput.val(), XWiki.EntityType.SPACE, appParentReference); 91 - } 92 - return new XWiki.EntityReference(appNameInput.val(), XWiki.EntityType.SPACE, appParentReference); 93 - }; 94 - 95 - var getNewAppHomePage = function() { 96 - var newAppReference = getNewAppReference(); 97 - var newAppHomePageReference = new XWiki.EntityReference('WebHome', XWiki.EntityType.DOCUMENT, newAppReference); 98 - return new XWiki.Document(newAppHomePageReference); 99 - }; 100 - 101 - var startValidation = function() { 102 - if (appNameInput.val() === '') { 103 - endValidation(appNameEmptyError); 104 - } else { 105 - var newAppHomePage = getNewAppHomePage(); 106 - if (newAppHomePage.documentReference.equals(XWiki.currentDocument.documentReference)) { 107 - endValidation(pageExistsError); 108 - } else { 109 - $.ajax({ 110 - type: 'HEAD', 111 - url: newAppHomePage.getURL() 112 - }).done(function() { 113 - endValidation(pageExistsError); 114 - }).fail(function(response) { 115 - if (response.status === 404) { 116 - $.ajax({ 117 - type: 'HEAD', 118 - url: newAppHomePage.getURL('edit') 119 - }).done(function() { 120 - endValidation(); 121 - }).fail(function() { 122 - endValidation(locationForbiddenError); 123 - }); 124 - } else if (response.status === 403) { 125 - endValidation(locationForbiddenError); 126 - } else { 127 - endValidation(); 128 - } 129 - }); 130 - } 131 - } 132 - }; 133 - 134 - var endValidation = function(error) { 135 - if (error) { 136 - error.show(); 137 - } 138 - appNameInput.removeClass('loading'); 139 - submitButton.prop('disabled', !!error); 140 - }; 141 - 142 - var validationTimeout; 143 - var scheduleValidation = function() { 144 - clearTimeout(validationTimeout); 145 - renameAppModal.find('.xErrorMsg').hide(); 146 - appNameInput.addClass('loading'); 147 - submitButton.prop('disabled', true); 148 - validationTimeout = setTimeout(startValidation, 500); 149 - }; 150 - 151 - appNameInput.add(appParentInput).on('input', scheduleValidation); 152 - 153 - var locationPickerModal = renameAppModal.find('.location-picker .modal'); 154 - renameAppModal.on('shown.bs.modal', function(event) { 155 - // Nested modals are not supported so we have to move the location picker modal outside, but we shouldn't do this 156 - // before the location picker has been initialized. That's why we wait for the rename application modal to be shown 157 - // first. 158 - renameAppModal.after(locationPickerModal); 159 - appNameInput.focus(); 160 - }); 161 - 162 - // Hide the rename application modal when the location picker modal is shown. 163 - locationPickerModal.removeClass('fade').on('show.bs.modal', function(event) { 164 - renameAppModal.modal('hide'); 165 - // Show the rename application modal when the location picker modal is hidden. 166 - }).on('hidden.bs.modal', function(event) { 167 - renameAppModal.modal('show'); 168 - }); 169 - 170 - renameAppModal.find('form').submit(function(event) { 171 - event.preventDefault(); 172 - renameApp(getRenameData($(this))); 173 - }); 174 - 175 - var getRenameData = function(form) { 176 - var data = getFormData(form); 177 - data.newAppReference = XWiki.Model.serialize(getNewAppReference(true)); 178 - delete data.newAppName; 179 - delete data.newAppParentReference; 180 - data.outputSyntax = 'plain'; 181 - return data; 182 - }; 183 - 184 - var getFormData = function(form) { 185 - var data = {}; 186 - form.serializeArray().forEach(function(parameter) { 187 - // Keep the first value; 188 - if (!data.hasOwnProperty(parameter.name)) { 189 - data[parameter.name] = parameter.value; 190 - } 191 - }); 192 - return data; 193 - }; 194 - 195 - var renameApp = function(data) { 196 - // Disable the form to prevent it from being submitted twice. 197 - renameAppModal.find(':input').prop('disabled', true); 198 - var notification = new XWiki.widgets.Notification( 199 - $jsontool.serialize($services.localization.render('appWithinMinutes.renameApp.inProgress')), 200 - 'inprogress' 201 - ); 202 - var renameAppURL = new XWiki.Document('RenameApplication', 'AppWithinMinutes').getURL('get'); 203 - $.post(renameAppURL, data).then(updateAppHomePage).done(function() { 204 - renameAppModal.modal('hide'); 205 - notification.replace(new XWiki.widgets.Notification( 206 - $jsontool.serialize($services.localization.render('appWithinMinutes.renameApp.done')), 207 - 'done' 208 - )); 209 - // Delay a bit the redirect so that the user notices the success message. 210 - setTimeout(function() { 211 - window.location.href = getNewAppHomePage().getURL(); 212 - }, 0); 213 - }).fail(function() { 214 - notification.replace(new XWiki.widgets.Notification( 215 - $jsontool.serialize($services.localization.render('appWithinMinutes.renameApp.failed')), 216 - 'error' 217 - )); 218 - }).always(function() { 219 - // Re-enable the form. 220 - renameAppModal.find(':input').prop('disabled', false); 221 - }); 222 - }; 223 - 224 - var updateAppHomePage = function() { 225 - var deferred = $.Deferred(); 226 - var newAppHomePageEditURL = getNewAppHomePage().getURL('edit'); 227 - $('<div/>').load(newAppHomePageEditURL + ' #inline', function() { 228 - var formData = $(this).children('form#inline').serializeArray(); 229 - if (formData.length > 0) { 230 - formData.push({name: 'xaction_save', value: true}); 231 - $.post(newAppHomePageEditURL, formData).done(function() { 232 - deferred.resolve(); 233 - }).fail(function() { 234 - deferred.reject(); 235 - }); 236 - } else { 237 - deferred.reject(); 238 - } 239 - }); 240 - return deferred.promise(); 241 - } 242 -});
- XWiki.StyleSheetExtension[0]
-
- Code
-
... ... @@ -58,12 +58,3 @@ 58 58 /* Make sure the live table doesn't overflow the action panel. */ 59 59 clear: right; 60 60 } 61 - 62 -/** 63 - * Rename Application 64 - */ 65 -#renameAppTitle.loading { 66 - background-position: right .3em center; 67 - padding-left: 12px; 68 - padding-right: 2em; 69 -}