Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
drupal
Manage
Activity
Members
Labels
Plan
Wiki
Custom issue tracker
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
project
drupal
Commits
5072c181
Commit
5072c181
authored
11 years ago
by
catch
Browse files
Options
Downloads
Patches
Plain Diff
Issue
#2203239
by YesCT, dawehner: Remove ajax_render and co.
parent
f0ed86e7
Loading
Loading
2 merge requests
!7452
Issue #1797438. HTML5 validation is preventing form submit and not fully...
,
!789
Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
core/includes/ajax.inc
+0
-148
0 additions, 148 deletions
core/includes/ajax.inc
with
0 additions
and
148 deletions
core/includes/ajax.inc
+
0
−
148
View file @
5072c181
...
...
@@ -5,8 +5,6 @@
* Functions for use with Drupal's Ajax framework.
*/
use
Drupal\Component\Utility\Json
;
/**
* @defgroup ajax Ajax framework
* @{
...
...
@@ -227,152 +225,6 @@
* See @link ajax_commands Ajax framework commands @endlink
*/
/**
* Renders a commands array into JSON.
*
* @param $commands
* A list of macro commands generated by the use of ajax_command_*()
* functions.
*/
function
ajax_render
(
$commands
=
array
())
{
// Ajax responses aren't rendered with html.html.twig, so we have to call
// drupal_get_css() and drupal_get_js() here, in order to have new files added
// during this request to be loaded by the page. We only want to send back
// files that the page hasn't already loaded, so we implement simple diffing
// logic using array_diff_key().
foreach
(
array
(
'css'
,
'js'
)
as
$type
)
{
// It is highly suspicious if $_POST['ajax_page_state'][$type] is empty,
// since the base page ought to have at least one JS file and one CSS file
// loaded. It probably indicates an error, and rather than making the page
// reload all of the files, instead we return no new files.
if
(
!
\Drupal
::
request
()
->
request
->
get
(
"ajax_page_state[
$type
]"
,
NULL
,
TRUE
))
{
$items
[
$type
]
=
array
();
}
else
{
$function
=
'_drupal_add_'
.
$type
;
$items
[
$type
]
=
$function
();
\Drupal
::
moduleHandler
()
->
alter
(
$type
,
$items
[
$type
]);
// @todo Inline CSS and JS items are indexed numerically. These can't be
// reliably diffed with array_diff_key(), since the number can change
// due to factors unrelated to the inline content, so for now, we strip
// the inline items from Ajax responses, and can add support for them
// when _drupal_add_css() and _drupal_add_js() are changed to use a hash
// of the inline content as the array key.
foreach
(
$items
[
$type
]
as
$key
=>
$item
)
{
if
(
is_numeric
(
$key
))
{
unset
(
$items
[
$type
][
$key
]);
}
}
// Ensure that the page doesn't reload what it already has.
$items
[
$type
]
=
array_diff_key
(
$items
[
$type
],
$_POST
[
'ajax_page_state'
][
$type
]);
}
}
// Render the HTML to load these files, and add AJAX commands to insert this
// HTML in the page. We pass TRUE as the $skip_alter argument to prevent the
// data from being altered again, as we already altered it above. Settings are
// handled separately, afterwards.
if
(
isset
(
$items
[
'js'
][
'settings'
]))
{
unset
(
$items
[
'js'
][
'settings'
]);
}
$styles
=
drupal_get_css
(
$items
[
'css'
],
TRUE
);
$scripts_footer
=
drupal_get_js
(
'footer'
,
$items
[
'js'
],
TRUE
);
$scripts_header
=
drupal_get_js
(
'header'
,
$items
[
'js'
],
TRUE
);
$extra_commands
=
array
();
if
(
!
empty
(
$styles
))
{
$extra_commands
[]
=
ajax_command_add_css
(
$styles
);
}
if
(
!
empty
(
$scripts_header
))
{
$extra_commands
[]
=
ajax_command_prepend
(
'head'
,
$scripts_header
);
}
if
(
!
empty
(
$scripts_footer
))
{
$extra_commands
[]
=
ajax_command_append
(
'body'
,
$scripts_footer
);
}
if
(
!
empty
(
$extra_commands
))
{
$commands
=
array_merge
(
$extra_commands
,
$commands
);
}
// Now add a command to merge changes and additions to drupalSettings.
$scripts
=
_drupal_add_js
();
if
(
!
empty
(
$scripts
[
'settings'
]))
{
$settings
=
drupal_merge_js_settings
(
$scripts
[
'settings'
][
'data'
]);
array_unshift
(
$commands
,
ajax_command_settings
(
$settings
,
TRUE
));
}
// Allow modules to alter any Ajax response.
\Drupal
::
moduleHandler
()
->
alter
(
'ajax_render'
,
$commands
);
return
Json
::
encode
(
$commands
);
}
/**
* Converts the return value of a page callback into an Ajax commands array.
*
* @param $page_callback_result
* The result of a page callback. Can be one of:
* - NULL: to indicate no content.
* - An integer menu status constant: to indicate an error condition.
* - A string of HTML content.
* - A renderable array of content.
*
* @return
* An Ajax commands array that can be passed to ajax_render().
*/
function
ajax_prepare_response
(
$page_callback_result
)
{
$commands
=
array
();
if
(
!
isset
(
$page_callback_result
))
{
// Simply delivering an empty commands array is sufficient. This results
// in the Ajax request being completed, but nothing being done to the page.
}
elseif
(
is_int
(
$page_callback_result
))
{
switch
(
$page_callback_result
)
{
case
MENU_NOT_FOUND
:
$commands
[]
=
ajax_command_alert
(
t
(
'The requested page could not be found.'
));
break
;
case
MENU_ACCESS_DENIED
:
$commands
[]
=
ajax_command_alert
(
t
(
'You are not authorized to access this page.'
));
break
;
case
MENU_SITE_OFFLINE
:
$commands
[]
=
ajax_command_alert
(
filter_xss_admin
(
t
(
\Drupal
::
config
(
'system.maintenance'
)
->
get
(
'message'
),
array
(
'@site'
=>
\Drupal
::
config
(
'system.site'
)
->
get
(
'name'
)))));
break
;
}
}
elseif
(
is_array
(
$page_callback_result
)
&&
isset
(
$page_callback_result
[
'#type'
])
&&
(
$page_callback_result
[
'#type'
]
==
'ajax'
))
{
// Complex Ajax callbacks can return a result that contains an error message
// or a specific set of commands to send to the browser.
$page_callback_result
+=
element_info
(
'ajax'
);
$error
=
$page_callback_result
[
'#error'
];
if
(
isset
(
$error
)
&&
$error
!==
FALSE
)
{
if
((
empty
(
$error
)
||
$error
===
TRUE
))
{
$error
=
t
(
'An error occurred while handling the request: The server received invalid input.'
);
}
$commands
[]
=
ajax_command_alert
(
$error
);
}
else
{
$commands
=
$page_callback_result
[
'#commands'
];
}
}
else
{
// Like normal page callbacks, simple Ajax callbacks can return HTML
// content, as a string or render array. This HTML is inserted in some
// relationship to #ajax['wrapper'], as determined by which jQuery DOM
// manipulation method is used. The method used is specified by
// #ajax['method']. The default method is 'replaceWith', which completely
// replaces the old wrapper element and its content with the new HTML.
$html
=
is_string
(
$page_callback_result
)
?
$page_callback_result
:
drupal_render
(
$page_callback_result
);
$commands
[]
=
ajax_command_insert
(
NULL
,
$html
);
// Add the status messages inside the new content's wrapper element, so that
// on subsequent Ajax requests, it is treated as old content.
$status_messages
=
array
(
'#theme'
=>
'status_messages'
);
$commands
[]
=
ajax_command_prepend
(
NULL
,
drupal_render
(
$status_messages
));
}
return
$commands
;
}
/**
* Form element processing handler for the #ajax form property.
*
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment