Add touch capacity for drag'n'drop gestures on screen, addresses #1802

feature/perblog_activation
franck 2013-10-27 09:46:02 +01:00
parent 4587e1f12a
commit 5ffbf4cf38
10 changed files with 291 additions and 121 deletions

View File

@ -30,6 +30,7 @@ dcPage::check('usage,contentadmin');
<link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />
<script type="text/javascript" src="js/jquery/jquery.js"></script>
<script type="text/javascript" src="js/jquery/jquery-ui.custom.js"></script>
<script type="text/javascript" src="js/jquery/jquery.ui.touch-punch.js"></script>
<script type="text/javascript" src="js/jquery/jquery.pageTabs.js"></script>
<script type="text/javascript" src="js/jquery/jquery.biscuit.js"></script>
<script type="text/javascript" src="js/jquery/jquery.bgFade.js"></script>
@ -84,13 +85,13 @@ dcPage::check('usage,contentadmin');
<div id="content" class="clearfix">
<div class="info">
<p>Cette page vise à présenter les règles graphiques et conventions utilisées dans les pages de l'administration
d'une installation Dotclear, à l'usage des contributeurs et développeurs d'extensions. Elle en est elle-même
d'une installation Dotclear, à l'usage des contributeurs et développeurs d'extensions. Elle en est elle-même
une illustration. L'observation de son code source peut donc servir de complément aux descriptions.</p>
</div>
<h2>Typographie</h2>
<h3 id="texte">Textes</h3>
<p>La font-size de base est à 1.2rem (la valeur <code>1rem</code> correspond à 10px). Si vous utilisez l'unité <code>rem</code> pensez à faire précéder la déclaration par son équivalent
<p>La font-size de base est à 1.2rem (la valeur <code>1rem</code> correspond à 10px). Si vous utilisez l'unité <code>rem</code> pensez à faire précéder la déclaration par son équivalent
en pixels pour rester compatible avec Internet Explorer. L'interlignage courant est à 1.5.</p>
<p>La liste suivante est de class <code>"nice"</code>. Elle est semblable aux listes ordinaires mais avec des puces carrées.</p>
<ul class="nice">
@ -141,7 +142,7 @@ dcPage::check('usage,contentadmin');
<p><span class="step">5</span> Si vous souhaitez un autre alignement des boîtes entre elles vous pouvez ajouter les class :</p>
<ul class="nice clear">
<li><code>"txt-left"</code>,</li>
<li><code>"txt-right"</code></li>
<li><code>"txt-right"</code></li>
<li>ou <code>"txt-center"</code></li>
</ul>
<p>à la class <code>"one-box"</code>.</p>
@ -316,7 +317,7 @@ dcPage::check('usage,contentadmin');
<h3 id="direct">Selecteur d'accès direct</h3>
<p>Sur des pages longues et denses comme les pages about:config ou about:preferences, on peut utiliser un sélecteur pour faciliter l'accès direct aux sections.</p>
<p class="anchor-nav">
<label class="classic" for="lp_nav">Aller à : </label>
<label class="classic" for="lp_nav">Aller à : </label>
<select id="lp_nav" name="lp_nav">
<option value="#l_accessibility">accessibility</option>
<option value="#l_dashboard">dashboard</option>
@ -336,30 +337,30 @@ dcPage::check('usage,contentadmin');
<p class="nav_prevnext"><a title="Titre de l'élément précédente" href="post.php?id=4145">«&nbsp;Élément précédent</a> | <a title="Titre de l'élément suivant" href="#">Élément suivant&nbsp;»</a></p>
<h2>Tableaux</h2>
<p>Il existe deux mises en forme type de tableaux selon que l'on cherche à faire un tableau ordinaire
<p>Il existe deux mises en forme type de tableaux selon que l'on cherche à faire un tableau ordinaire
ou un tableau dont on peut déplacer les lignes par glisser déposer (voir plus bas). Cependant certaines règles
sont communes à tout les tableaux.</p>
<h3 id="communes">Règles communes</h3>
<h4>Largeur du tableau</h4>
<p>Sauf pour des tableaux particuliers (absents dans l'admin mais qui pourraient être nécessaires
à un plugin,les tableaux occupent toute la largeur de la page. Afin que les tableaux soient consultables
sur un mobile en navigant horizontalement, on englobe le tableau dans une <code>div class="table-outer"</code>,
<p>Sauf pour des tableaux particuliers (absents dans l'admin mais qui pourraient être nécessaires
à un plugin,les tableaux occupent toute la largeur de la page. Afin que les tableaux soient consultables
sur un mobile en navigant horizontalement, on englobe le tableau dans une <code>div class="table-outer"</code>,
qui servira de «&nbsp;conteneur&nbsp;».</p>
<h4>Accessibilité</h4>
<p>Les éléments caption, th, scope sont nécessaires à l'accessibilité. Ne les oubliez pas&nbsp;!&nbsp;».
On peut utiliser la <code>class="hidden"</code> sur l'élément <code>caption</code> (qui accueille
<p>Les éléments caption, th, scope sont nécessaires à l'accessibilité. Ne les oubliez pas&nbsp;!&nbsp;».
On peut utiliser la <code>class="hidden"</code> sur l'élément <code>caption</code> (qui accueille
le titre du tableau) si vous ne souhaitez pas qu'il soit affiché sur la page.</p>
<h4>Les classes</h4>
<p>Des classes particulières peuvent être attribuées aux lignes :</p>
<ul>
<li><code>line</code> (systématique) : pour les traits horizontaux et le fond gris léger
<li><code>line</code> (systématique) : pour les traits horizontaux et le fond gris léger
au survol&nbsp;;</li>
<li><code>offline</code> : pour un noir estompé (gris quoi).</li>
</ul>
<p>Des classes particulières peuvent être appliquées aux cellules :</p>
<ul>
<li><code>nowrap</code> : pas de retour à la ligne dans la cellule, quelle que soit la
<li><code>nowrap</code> : pas de retour à la ligne dans la cellule, quelle que soit la
largeur de la page&nbsp;;</li>
<li><code>maximal</code> : la cellule prendra toute la largeur restante disponible&nbsp;;</li>
<li><code>count</code> : le contenu de la cellule sera aligné à droite avec un petit retrait.</li>
@ -428,8 +429,8 @@ dcPage::check('usage,contentadmin');
<td class="nowrap status"><img alt="Publié" title="Publié" src="images/check-on.png" /> </td>
</tr>
</table>
</div>
</div>
<h3>Tableau avec ordonnancement</h3>
<p>Les tableaux permettant l'ordonnancement doivent offrir la possibilité d'effectuer le classement grâce à
des inputs placés en début de ligne pour que le classement soit possible même lorsque cette fonctionnalité est
@ -577,7 +578,7 @@ dcPage::check('usage,contentadmin');
<div id="footer">
<a href="http://dotclear.org/" title="Merci de manger des clafoutis."><img src="style/dc_logos/w-dotclear90.png" alt="Merci d'utiliser Dotclear 2.6-dev." /></a>
</div><!-- /footer -->
<!--
<!--
.
,;:'`'::
__||
@ -587,4 +588,4 @@ dcPage::check('usage,contentadmin');
-->
</div><!-- /wrapper -->
</body>
</html>
</html>

View File

@ -45,7 +45,7 @@ if (!empty($_POST['mov']) && !empty($_POST['mov_cat'])) {
$keys = array_keys($_POST['mov']);
$cat_id = (int) $keys[0];
$mov_cat = (int) $_POST['mov_cat'][$cat_id];
$mov_cat = $mov_cat ? $mov_cat : null;
if ($mov_cat !== null) {
$c = $core->blog->getCategory($mov_cat);
@ -106,6 +106,7 @@ if (!$core->auth->user_prefs->accessibility->nodragdrop
&& $core->auth->check('categories',$core->blog->id)
&& $rs->count()>1) {
$starting_script .= dcPage::jsLoad('js/jquery/jquery-ui.custom.js');
$starting_script .= dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js');
$starting_script .= dcPage::jsLoad('js/jquery/jquery.mjs.nestedSortable.js');
}
$starting_script .= dcPage::jsLoad('js/_categories.js');
@ -160,7 +161,7 @@ else
echo '</li><li '.$attr.'>';
}
echo
echo
'<p class="cat-title"><label class="classic" for="cat_'.$rs->cat_id.'"><a href="category.php?id='.$rs->cat_id.'">'.html::escapeHTML($rs->cat_title).'</a></label> </p>'.
'<p class="cat-nb-posts">(<a href="posts.php?cat_id='.$rs->cat_id.'">'.
sprintf(($rs->nb_post > 1 ? __('%d entries') : __('%d entry') ),$rs->nb_post).'</a>'.
@ -172,17 +173,17 @@ else
if ($rs->nb_total>0) {
// remove current category
echo
'<label>'.__('Move entries to').'</label> '.
'<label>'.__('Move entries to').'</label> '.
form::combo(array('mov_cat['.$rs->cat_id.']', 'mov_cat_'.$rs->cat_id),array_filter($categories_combo, create_function('$cat', 'return $cat->value!=$GLOBALS[\'rs\']->cat_id;')),'','').
' <input type="submit" class="reset" name="mov['.$rs->cat_id.']" value="'.__('OK').'"/>';
$attr_disabled = ' disabled="disabled"';
$input_class = 'disabled ';
} else {
$attr_disabled = '';
$input_class = '';
}
echo
echo
'<input type="submit"'.$attr_disabled.' class="'.$input_class.'delete" name="delete['.$rs->cat_id.']" value="'.__('Delete category').'"/>'.
'</p>';

View File

@ -0,0 +1,160 @@
/*!
* jQuery UI Touch Punch 0.2.2
*
* Copyright 2011, Dave Furfero
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Depends:
* jquery.ui.widget.js
* jquery.ui.mouse.js
*/
(function ($) {
// Detect touch support
$.support.touch = 'ontouchend' in document;
// Ignore browsers without touch support
if (!$.support.touch) {
return;
}
var mouseProto = $.ui.mouse.prototype,
_mouseInit = mouseProto._mouseInit,
touchHandled;
/**
* Simulate a mouse event based on a corresponding touch event
* @param {Object} event A touch event
* @param {String} simulatedType The corresponding mouse event
*/
function simulateMouseEvent (event, simulatedType) {
// Ignore multi-touch events
if (event.originalEvent.touches.length > 1) {
return;
}
event.preventDefault();
var touch = event.originalEvent.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvents');
// Initialize the simulated mouse event using the touch event's coordinates
simulatedEvent.initMouseEvent(
simulatedType, // type
true, // bubbles
true, // cancelable
window, // view
1, // detail
touch.screenX, // screenX
touch.screenY, // screenY
touch.clientX, // clientX
touch.clientY, // clientY
false, // ctrlKey
false, // altKey
false, // shiftKey
false, // metaKey
0, // button
null // relatedTarget
);
// Dispatch the simulated event to the target element
event.target.dispatchEvent(simulatedEvent);
}
/**
* Handle the jQuery UI widget's touchstart events
* @param {Object} event The widget element's touchstart event
*/
mouseProto._touchStart = function (event) {
var self = this;
// Ignore the event if another widget is already being handled
if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {
return;
}
// Set the flag to prevent other widgets from inheriting the touch event
touchHandled = true;
// Track movement to determine if interaction was a click
self._touchMoved = false;
// Simulate the mouseover event
simulateMouseEvent(event, 'mouseover');
// Simulate the mousemove event
simulateMouseEvent(event, 'mousemove');
// Simulate the mousedown event
simulateMouseEvent(event, 'mousedown');
};
/**
* Handle the jQuery UI widget's touchmove events
* @param {Object} event The document's touchmove event
*/
mouseProto._touchMove = function (event) {
// Ignore event if not handled
if (!touchHandled) {
return;
}
// Interaction was not a click
this._touchMoved = true;
// Simulate the mousemove event
simulateMouseEvent(event, 'mousemove');
};
/**
* Handle the jQuery UI widget's touchend events
* @param {Object} event The document's touchend event
*/
mouseProto._touchEnd = function (event) {
// Ignore event if not handled
if (!touchHandled) {
return;
}
// Simulate the mouseup event
simulateMouseEvent(event, 'mouseup');
// Simulate the mouseout event
simulateMouseEvent(event, 'mouseout');
// If the touch interaction did not move, it should trigger a click
if (!this._touchMoved) {
// Simulate the click event
simulateMouseEvent(event, 'click');
}
// Unset the flag to allow other widgets to inherit the touch event
touchHandled = false;
};
/**
* A duck punch of the $.ui.mouse _mouseInit method to support touch events.
* This method extends the widget with bound touch event handlers that
* translate touch events to mouse events and pass them to the widget's
* original mouse event handling methods.
*/
mouseProto._mouseInit = function () {
var self = this;
// Delegate the touch handlers to the widget's element
self.element
.bind('touchstart', $.proxy(self, '_touchStart'))
.bind('touchmove', $.proxy(self, '_touchMove'))
.bind('touchend', $.proxy(self, '_touchEnd'));
// Call the original $.ui.mouse init method
_mouseInit.call(self);
};
})(jQuery);

View File

@ -46,8 +46,8 @@ $user_ui_media_by_page = ($core->auth->user_prefs->interface->media_by_page ? $c
$default_tab = !empty($_GET['tab']) ? html::escapeHTML($_GET['tab']) : 'user-profile';
if (!empty($_GET['append']) || !empty($_GET['removed']) || !empty($_GET['neworder']) ||
!empty($_GET['replaced']) || !empty($_POST['appendaction']) || !empty($_POST['removeaction']) ||
if (!empty($_GET['append']) || !empty($_GET['removed']) || !empty($_GET['neworder']) ||
!empty($_GET['replaced']) || !empty($_POST['appendaction']) || !empty($_POST['removeaction']) ||
!empty($_GET['db-updated'])) {
$default_tab = 'user-favorites';
} elseif (!empty($_GET['updated'])) {
@ -83,13 +83,13 @@ if (isset($_POST['user_name']))
try
{
$pwd_check = !empty($_POST['cur_pwd']) && $core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['cur_pwd']));
if ($core->auth->allowPassChange() && !$pwd_check && $user_email != $_POST['user_email']) {
throw new Exception(__('If you want to change your email or password you must provide your current password.'));
}
$cur = $core->con->openCursor($core->prefix.'user');
$cur->user_name = $user_name = $_POST['user_name'];
$cur->user_firstname = $user_firstname = $_POST['user_firstname'];
$cur->user_displayname = $user_displayname = $_POST['user_displayname'];
@ -99,29 +99,29 @@ if (isset($_POST['user_name']))
$cur->user_tz = $user_tz = $_POST['user_tz'];
$cur->user_options = new ArrayObject($user_options);
if ($core->auth->allowPassChange() && !empty($_POST['new_pwd']))
{
if (!$pwd_check) {
throw new Exception(__('If you want to change your email or password you must provide your current password.'));
}
if ($_POST['new_pwd'] != $_POST['new_pwd_c']) {
throw new Exception(__("Passwords don't match"));
}
$cur->user_pwd = $_POST['new_pwd'];
}
# --BEHAVIOR-- adminBeforeUserUpdate
$core->callBehavior('adminBeforeUserProfileUpdate',$cur,$core->auth->userID());
# Udate user
$core->updUser($core->auth->userID(),$cur);
# --BEHAVIOR-- adminAfterUserUpdate
$core->callBehavior('adminAfterUserProfileUpdate',$cur,$core->auth->userID());
dcPage::addSuccessNotice(__('Personal information has been successfully updated.'));
http::redirect('preferences.php');
@ -133,12 +133,12 @@ if (isset($_POST['user_name']))
}
# Update user options
if (isset($_POST['user_post_format']))
if (isset($_POST['user_post_format']))
{
try
{
$cur = $core->con->openCursor($core->prefix.'user');
$cur->user_name = $user_name;
$cur->user_firstname = $user_firstname;
$cur->user_displayname = $user_displayname;
@ -148,19 +148,19 @@ if (isset($_POST['user_post_format']))
$cur->user_tz = $user_tz;
$cur->user_post_status = $user_post_status = $_POST['user_post_status'];
$user_options['edit_size'] = (integer) $_POST['user_edit_size'];
if ($user_options['edit_size'] < 1) {
$user_options['edit_size'] = 10;
}
$user_options['post_format'] = $_POST['user_post_format'];
$user_options['enable_wysiwyg'] = !empty($_POST['user_wysiwyg']);
$cur->user_options = new ArrayObject($user_options);
# --BEHAVIOR-- adminBeforeUserOptionsUpdate
$core->callBehavior('adminBeforeUserOptionsUpdate',$cur,$core->auth->userID());
# Update user prefs
$core->auth->user_prefs->accessibility->put('nodragdrop',!empty($_POST['user_acc_nodragdrop']),'boolean');
$core->auth->user_prefs->interface->put('enhanceduploader',!empty($_POST['user_ui_enhanceduploader']),'boolean');
@ -169,13 +169,13 @@ if (isset($_POST['user_post_format']))
$core->auth->user_prefs->interface->put('hide_std_favicon',!empty($_POST['user_ui_hide_std_favicon']),'boolean',null,true,true);
}
$core->auth->user_prefs->interface->put('media_by_page',(integer)$_POST['user_ui_media_by_page'],'integer');
# Udate user
$core->updUser($core->auth->userID(),$cur);
# --BEHAVIOR-- adminAfterUserOptionsUpdate
$core->callBehavior('adminAfterUserOptionsUpdate',$cur,$core->auth->userID());
dcPage::addSuccessNotice(__('Personal options has been successfully updated.'));
http::redirect('preferences.php#user-options');
}
@ -191,17 +191,17 @@ if (isset($_POST['db-options'])) {
{
# --BEHAVIOR-- adminBeforeUserOptionsUpdate
$core->callBehavior('adminBeforeDashboardOptionsUpdate',$core->auth->userID());
# Update user prefs
$core->auth->user_prefs->dashboard->put('doclinks',!empty($_POST['user_dm_doclinks']),'boolean');
$core->auth->user_prefs->dashboard->put('dcnews',!empty($_POST['user_dm_dcnews']),'boolean');
$core->auth->user_prefs->dashboard->put('quickentry',!empty($_POST['user_dm_quickentry']),'boolean');
$core->auth->user_prefs->interface->put('iconset',(!empty($_POST['user_ui_iconset']) ? $_POST['user_ui_iconset'] : ''));
$core->auth->user_prefs->interface->put('nofavmenu',empty($_POST['user_ui_nofavmenu']),'boolean');
# --BEHAVIOR-- adminAfterUserOptionsUpdate
$core->callBehavior('adminAfterDashboardOptionsUpdate',$core->auth->userID());
dcPage::addSuccessNotice(__('Dashboard options has been successfully updated.'));
http::redirect('preferences.php#user-favorites');
}
@ -212,7 +212,7 @@ if (isset($_POST['db-options'])) {
}
# Add selected favorites
if (!empty($_POST['appendaction']))
if (!empty($_POST['appendaction']))
{
try {
if (empty($_POST['append'])) {
@ -279,7 +279,7 @@ if (!empty($_POST['saveorder']) && !empty($order))
if (!$core->favs->exists($v)) {
unset($order[$k]);
}
}
}
$core->favs->setFavoriteIDs($order,false);
if (!$core->error->flag()) {
dcPage::addSuccessNotice(__('Favorites have been successfully updated.'));
@ -304,6 +304,7 @@ dcPage::open($page_title,
dcPage::jsLoad('js/_preferences.js').
($user_acc_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')).
dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
dcPage::jsLoad('js/jquery/jquery.pwstrength.js').
'<script type="text/javascript">'."\n".
"//<![CDATA[\n".
@ -319,7 +320,7 @@ dcPage::open($page_title,
"</script>\n".
dcPage::jsPageTabs($default_tab).
dcPage::jsConfirmClose('user-form').
# --BEHAVIOR-- adminPreferencesHeaders
$core->callBehavior('adminPreferencesHeaders'),
@ -385,7 +386,7 @@ if ($core->auth->allowPassChange())
{
echo
'<h4 class="vertical-separator pretty-title">'.__('Change my password').'</h4>'.
'<div class="pw-table">'.
'<p class="pw-cell"><label for="new_pwd">'.__('New password:').'</label>'.
form::password('new_pwd',20,255,'','','',false,' data-indicator="pwindicator" ').'</p>'.
@ -394,10 +395,10 @@ if ($core->auth->allowPassChange())
' <p class="label no-margin"></p>'.
'</div>'.
'</div>'.
'<p><label for="new_pwd_c">'.__('Confirm new password:').'</label>'.
form::password('new_pwd_c',20,255).'</p>'.
'<p><label for="cur_pwd">'.__('Your current password:').'</label>'.
form::password('cur_pwd',20,255).'</p>'.
'<p class="form-note warn">'.
@ -588,7 +589,7 @@ form::checkbox('user_ui_nofavmenu',1,!$user_ui_nofavmenu).' '.
__('Display favorites at the top of the menu').'</label></p></div>';
if (count($iconsets_combo) > 1) {
echo
echo
'<div class="fieldset">'.
'<h4>'.__('Dashboard icons').'</h4>'.
'<p><label for="user_ui_iconset" class="classic">'.__('Iconset:').'</label> '.

View File

@ -116,6 +116,7 @@ catch (Exception $e)
if (!$core->auth->user_prefs->accessibility->nodragdrop) {
echo
dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
dcPage::jsLoad('index.php?pf=antispam/antispam.js');
}
?>
@ -260,4 +261,4 @@ else
?>
</body>
</html>
</html>

View File

@ -26,7 +26,7 @@ $cat_title = '';
if (!empty($_POST['import_links']) && !empty($_FILES['links_file']))
{
$default_tab = 'import-links';
try
{
files::uploadStatus($_FILES['links_file']);
@ -34,7 +34,7 @@ if (!empty($_POST['import_links']) && !empty($_FILES['links_file']))
if (!move_uploaded_file($_FILES['links_file']['tmp_name'],$ifile)) {
throw new Exception(__('Unable to move uploaded file.'));
}
require_once dirname(__FILE__).'/class.dc.importblogroll.php';
try {
$imported = dcImportBlogroll::loadFile($ifile);
@ -43,8 +43,8 @@ if (!empty($_POST['import_links']) && !empty($_FILES['links_file']))
@unlink($ifile);
throw $e;
}
if (empty($imported)) {
unset($imported);
throw new Exception(__('Nothing to import'));
@ -68,14 +68,14 @@ if (!empty($_POST['import_links_do'])) {
$default_tab = 'import-links';
}
}
dcPage::addSuccessNotice(__('links have been successfully imported.'));
http::redirect($p_url);
http::redirect($p_url);
}
if (!empty($_POST['cancel_import'])) {
$core->error->add(__('Import operation cancelled.'));
$default_tab = 'import-links';
$default_tab = 'import-links';
}
# Add link
@ -85,7 +85,7 @@ if (!empty($_POST['add_link']))
$link_href = $_POST['link_href'];
$link_desc = $_POST['link_desc'];
$link_lang = $_POST['link_lang'];
try {
$blogroll->addLink($link_title,$link_href,$link_desc,$link_lang);
@ -101,7 +101,7 @@ if (!empty($_POST['add_link']))
if (!empty($_POST['add_cat']))
{
$cat_title = $_POST['cat_title'];
try {
$blogroll->addCategory($cat_title);
dcPage::addSuccessNotice(__('category has been successfully created.'));
@ -123,7 +123,7 @@ if (!empty($_POST['removeaction']) && !empty($_POST['remove'])) {
break;
}
}
if (!$core->error->flag()) {
dcPage::addSuccessNotice(__('Items have been successfully removed.'));
http::redirect($p_url);
@ -144,14 +144,14 @@ if (!empty($_POST['saveorder']) && !empty($order))
{
foreach ($order as $pos => $l) {
$pos = ((integer) $pos)+1;
try {
$blogroll->updateOrder($l,$pos);
} catch (Exception $e) {
$core->error->add($e->getMessage());
}
}
if (!$core->error->flag()) {
dcPage::addSuccessNotice(__('Items order has been successfully updated'));
http::redirect($p_url);
@ -171,11 +171,12 @@ try {
<head>
<title><?php echo __('Blogroll'); ?></title>
<?php echo dcPage::jsConfirmClose('links-form','add-link-form','add-category-form'); ?>
<?php
<?php
$core->auth->user_prefs->addWorkspace('accessibility');
if (!$core->auth->user_prefs->accessibility->nodragdrop) {
echo
dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
dcPage::jsLoad('index.php?pf=blogroll/blogroll.js');
}
?>
@ -212,13 +213,13 @@ try {
while ($rs->fetch())
{
$position = (string) $rs->index()+1;
echo
'<tr class="line" id="l_'.$rs->link_id.'">'.
'<td class="handle minimal">'.form::field(array('order['.$rs->link_id.']'),2,5,$position,'position','',false,'title="'.__('position').'"').'</td>'.
'<td class="minimal">'.form::checkbox(array('remove[]'),$rs->link_id,'','','',false,'title="'.__('select this link').'"').'</td>';
if ($rs->is_cat)
{
echo
@ -234,7 +235,7 @@ while ($rs->fetch())
'<td>'.html::escapeHTML($rs->link_href).'</td>'.
'<td>'.html::escapeHTML($rs->link_lang).'</td>';
}
echo '</tr>';
}
?>
@ -244,14 +245,14 @@ while ($rs->fetch())
<div class="two-cols">
<p class="col">
<?php
echo
echo
form::hidden('links_order','').
form::hidden(array('p'),'blogroll').
$core->formNonce();
?>
<input type="submit" name="saveorder" value="<?php echo __('Save order'); ?>" /></p>
<p class="col right"><input type="submit" class="delete" name="removeaction"
value="<?php echo __('Delete selected links'); ?>"
value="<?php echo __('Delete selected links'); ?>"
onclick="return window.confirm('
<?php echo html::escapeJS(__('Are you sure you want to delete selected links?')); ?>');" /></p>
</div>
@ -329,14 +330,14 @@ else {
'<th colspan="2">'.__('Title').'</th>'.
'<th>'.__('Description').'</th>'.
'</tr>';
$i = 0;
foreach ($imported as $entry) {
$url = html::escapeHTML($entry->link);
$title = html::escapeHTML($entry->title);
$desc = html::escapeHTML($entry->desc);
echo
echo
'<tr><td>'.form::checkbox(array('entries[]'),$i,'','','').'</td>'.
'<td nowrap><a href="'.$url.'">'.$title.'</a>'.
'<input type="hidden" name="url['.$i.']" value="'.$url.'" />'.
@ -344,14 +345,14 @@ else {
'</td>'.
'<td>'.$desc.
'<input type="hidden" name="desc['.$i.']" value="'.$desc.'" />'.
'</td></tr>'."\n";
'</td></tr>'."\n";
$i++;
}
echo
'</table>'.
'<div class="two-cols">'.
'<p class="col checkboxes-helpers"></p>'.
'<p class="col right">'.
form::hidden(array('p'),'blogroll').
$core->formNonce().
@ -368,4 +369,4 @@ dcPage::helpBlock('blogroll');
?>
</body>
</html>
</html>

View File

@ -54,7 +54,9 @@ $core->callBehavior('adminPagesActionsCombo',array(&$combo_action));
<head>
<title><?php echo __('Pages'); ?></title>
<?php
echo dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
echo
dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
dcPage::jsLoad('index.php?pf=pages/list.js').
'<script type="text/javascript">'.
"\n".'//<![CDATA['."\n".
@ -88,12 +90,12 @@ if (!$core->error->flag())
# Show pages
$post_list->display($page,$nb_per_page,
'<form action="plugin.php" method="post" id="form-entries">'.
'%s'.
'<div class="two-cols">'.
'<p class="col checkboxes-helpers"></p>'.
'<p class="col right"><label for="action" class="classic">'.__('Selected pages action:').'</label> '.
form::combo('action',$pages_actions_page->getCombo()).
'<input type="submit" value="'.__('ok').'" /></p>'.
@ -115,4 +117,4 @@ dcPage::helpBlock('pages');
</html>
<?php
}
?>
?>

View File

@ -203,7 +203,7 @@ if ($step) {
case 4:
// Fourth step, menu item to be added
try {
if (($item_label != '') && ($item_url != ''))
if (($item_label != '') && ($item_url != ''))
{
// Add new item menu in menu array
$menu[] = array(
@ -214,7 +214,7 @@ if ($step) {
// Save menu in blog settings
$core->blog->settings->system->put('simpleMenu',serialize($menu));
$core->blog->triggerBlog();
// All done successfully, return to menu items list
dcPage::addSuccessNotice(__('Menu item has been successfully added.'));
http::redirect($p_url);
@ -228,7 +228,7 @@ if ($step) {
break;
}
} else {
# Remove selected menu items
if (!empty($_POST['removeaction']))
{
@ -250,7 +250,7 @@ if ($step) {
// Save menu in blog settings
$core->blog->settings->system->put('simpleMenu',serialize($menu));
$core->blog->triggerBlog();
// All done successfully, return to menu items list
dcPage::addSuccessNotice(__('Menu items have been successfully removed.'));
http::redirect($p_url);
@ -294,7 +294,7 @@ if ($step) {
$core->error->add($e->getMessage());
}
}
# Order menu items
$order = array();
if (empty($_POST['im_order']) && !empty($_POST['order'])) {
@ -327,12 +327,12 @@ if ($step) {
// All done successfully, return to menu items list
dcPage::addSuccessNotice(__('Menu items have been successfully updated.'));
http::redirect($p_url);
}
}
catch (Exception $e) {
$core->error->add($e->getMessage());
}
}
}
# Display
@ -341,11 +341,12 @@ if ($step) {
<html>
<head>
<title><?php echo $page_title; ?></title>
<?php
<?php
$core->auth->user_prefs->addWorkspace('accessibility');
if (!$core->auth->user_prefs->accessibility->nodragdrop) {
echo
dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
dcPage::jsLoad('index.php?pf=simpleMenu/simplemenu.js');
}
?>
@ -473,7 +474,7 @@ if (count($menu)) {
echo '<form id="menuitems" action="'.$p_url.'" method="post">';
}
// Entête table
echo
echo
'<div class="table-outer">'.
'<table class="dragable">'.
'<caption>'.__('Menu items list').'</caption>'.
@ -530,4 +531,4 @@ dcPage::helpBlock('simpleMenu');
?>
</body>
</html>
</html>

View File

@ -52,14 +52,14 @@ if (!empty($_POST['append']) && is_array($_POST['addw']))
$addw[$k] = $v;
}
}
# Append 1 widget
$wid = false;
if( gettype($_POST['append']) == 'array' && count($_POST['append']) == 1 ) {
$wid = array_keys($_POST['append']);
$wid = $wid[0];
}
# Append widgets
if (!empty($addw))
{
@ -72,7 +72,7 @@ if (!empty($_POST['append']) && is_array($_POST['addw']))
if (!($widgets_custom instanceof dcWidgets)) {
$widgets_custom = new dcWidgets();
}
foreach ($addw as $k => $v)
{
if( !$wid || $wid == $k )
@ -90,7 +90,7 @@ if (!empty($_POST['append']) && is_array($_POST['addw']))
}
}
}
try {
$core->blog->settings->addNamespace('widgets');
$core->blog->settings->widgets->put('widgets_nav',$widgets_nav->store());
@ -150,7 +150,7 @@ if (!empty($_POST['wup']) || $removing || $move )
if (!isset($_POST['w']) || !is_array($_POST['w'])) {
$_POST['w'] = array();
}
try
{
# Removing mark as _rem widgets
@ -162,7 +162,7 @@ if (!empty($_POST['wup']) || $removing || $move )
}
}
}
if (!isset($_POST['w']['nav'])) {
$_POST['w']['nav'] = array();
}
@ -172,17 +172,17 @@ if (!empty($_POST['wup']) || $removing || $move )
if (!isset($_POST['w']['custom'])) {
$_POST['w']['custom'] = array();
}
$widgets_nav = dcWidgets::loadArray($_POST['w']['nav'],$__widgets);
$widgets_extra = dcWidgets::loadArray($_POST['w']['extra'],$__widgets);
$widgets_custom = dcWidgets::loadArray($_POST['w']['custom'],$__widgets);
$core->blog->settings->addNamespace('widgets');
$core->blog->settings->widgets->put('widgets_nav',$widgets_nav->store());
$core->blog->settings->widgets->put('widgets_extra',$widgets_extra->store());
$core->blog->settings->widgets->put('widgets_custom',$widgets_custom->store());
$core->blog->triggerBlog();
http::redirect($p_url);
}
catch (Exception $e)
@ -199,7 +199,7 @@ elseif (!empty($_POST['wreset']))
$core->blog->settings->widgets->put('widgets_extra','');
$core->blog->settings->widgets->put('widgets_custom','');
$core->blog->triggerBlog();
http::redirect($p_url);
}
catch (Exception $e)
@ -217,10 +217,11 @@ elseif (!empty($_POST['wreset']))
<?php
echo
dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
dcPage::jsLoad('index.php?pf=widgets/widgets.js');
?>
<?php
$core->auth->user_prefs->addWorkspace('accessibility');
<?php
$core->auth->user_prefs->addWorkspace('accessibility');
$user_dm_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop;
?>
<?php if (!$user_dm_nodragdrop) : ?>
@ -324,7 +325,7 @@ foreach ($__widgets->elements() as $w)
__('Widget ID:').' <strong>'.html::escapeHTML($w->id()).'</strong>)'.
($w->desc() != '' ? ' <span class="form-note">'.__($w->desc()).'</span>' : '').'</dt>'.
'<dd>';
$w_settings = $w->settings();
if (empty($w_settings))
{
@ -349,7 +350,7 @@ foreach ($__widgets->elements() as $w)
$s_type = __('string');
break;
}
$widget_elements->content .=
'<li>'.
__('Setting name:').' <strong>'.html::escapeHTML($n).'</strong>'.
@ -367,24 +368,24 @@ dcPage::helpBlock($widget_elements);
function sidebarWidgets($id,$title,$widgets,$pr,$default_widgets,&$j)
{
$res = '<h3>'.$title.'</h3>';
if (!($widgets instanceof dcWidgets))
{
$widgets = $default_widgets;
}
$res .= '<ul id="'.$id.'" class="connected">';
$res .= '<li class="empty-widgets" '.(!$widgets->isEmpty() ? 'style="display: none;"' : '').'>'.__('No widget for now.').'</li>';
$res .= '<li class="empty-widgets" '.(!$widgets->isEmpty() ? 'style="display: none;"' : '').'>'.__('No widget for now.').'</li>';
$i = 0;
foreach ($widgets->elements() as $w)
{
$upDisabled = $i == 0 ? '" disabled="" src="images/disabled_' : '" src="images/';
$downDisabled = $i == count($widgets->elements())-1 ? '" disabled="" src="images/disabled_' : '" src="images/';
$iname = 'w['.$pr.']['.$i.']';
$res .=
'<li>'.form::hidden(array($iname.'[id]'),html::escapeHTML($w->id())).
'<p class="widget-name">'.form::field(array($iname.'[order]'),2,3,(string) $i,'hidden','',0,'title="'.__('order').'"').
@ -398,18 +399,18 @@ function sidebarWidgets($id,$title,$widgets,$pr,$default_widgets,&$j)
'<br class="clear"/></p>'.
'<div class="widgetSettings hidden-if-drag">'.$w->formSettings($iname,$j).'</div>'.
'</li>';
$i++;
$j++;
}
$res .= '</ul>';
$res .= '<ul class="sortable-delete"'.($i > 0 ? '':' style="display: none;"').'><li class="sortable-delete-placeholder">'.
__('Drag widgets here to remove.').'</li></ul>';
return $res;
}
?>
</body>
</html>
</html>

View File

@ -25,7 +25,8 @@ class tplDuctileThemeAdmin
$core->auth->user_prefs->addWorkspace('accessibility');
if (!$core->auth->user_prefs->accessibility->nodragdrop) {
echo
dcPage::jsLoad('js/jquery/jquery-ui.custom.js');
dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js');
echo <<<EOT
<script type="text/javascript">
//<![CDATA[
@ -54,4 +55,4 @@ EOT;
}
}
?>
?>