Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
D
drupal
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Custom Issue Tracker
Custom Issue Tracker
Labels
Merge Requests
225
Merge Requests
225
Requirements
Requirements
List
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Analytics
Analytics
Code Review
Insights
Issue
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
project
drupal
Commits
5072c181
Commit
5072c181
authored
Feb 24, 2014
by
catch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue
#2203239
by YesCT, dawehner: Remove ajax_render and co.
parent
f0ed86e7
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
148 deletions
+0
-148
core/includes/ajax.inc
core/includes/ajax.inc
+0
-148
No files found.
core/includes/ajax.inc
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.
*
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment