Compare commits

...

8 Commits

Author SHA1 Message Date
c0c89fe50a Fix link in edited messages 2023-08-09 22:58:23 +02:00
5c629e9bf6 Redirect note to me.sap.com 2023-08-08 20:06:57 +02:00
beb2f19d27 Remove # operator 2022-03-11 15:03:12 +01:00
483781d1fb Fix # operator 2022-03-11 15:00:27 +01:00
1c5e04458e Add backtick as string separator 2022-03-11 14:55:19 +01:00
3b73ca626a Add a few more 7.40 syntax key words 2022-03-11 14:49:21 +01:00
a62842fa35 Merge branch 'master' of ssh://git.lutran.fr:2244/franzz/databap 2021-11-15 19:44:06 +01:00
68a178d445 Fix color customization 2021-11-15 19:43:49 +01:00
4 changed files with 80 additions and 62 deletions

View File

@@ -216,7 +216,6 @@ class Databap extends PhpObject
header('Content-Type: text/html; charset='.Settings::TEXT_ENC); header('Content-Type: text/html; charset='.Settings::TEXT_ENC);
mb_internal_encoding(Settings::TEXT_ENC); mb_internal_encoding(Settings::TEXT_ENC);
mb_http_output(Settings::TEXT_ENC); mb_http_output(Settings::TEXT_ENC);
mb_http_input(Settings::TEXT_ENC);
mb_language('uni'); mb_language('uni');
mb_regex_encoding(Settings::TEXT_ENC); mb_regex_encoding(Settings::TEXT_ENC);
@@ -313,8 +312,7 @@ class Databap extends PhpObject
{ {
if($sType!='') if($sType!='')
{ {
if($sType!='' && !array_key_exists($sType, self::$TYPES)) self::addError('Type "'.$sType.'" inconnu'); if(array_key_exists($sType, self::$TYPES)) $asResult = array($sType=>self::$TYPES[$sType]);
else $asResult = array($sType=>self::$TYPES[$sType]);
} }
else $asResult = self::$TYPES; else $asResult = self::$TYPES;
@@ -328,8 +326,7 @@ class Databap extends PhpObject
$asResult[$sType] = array(); $asResult[$sType] = array();
foreach($oInfo as $sInfo) foreach($oInfo as $sInfo)
{ {
if(!array_key_exists($sInfo, $asTypeInfo)) self::addError('Info "'.$sInfo.'" inconnue'); if(array_key_exists($sInfo, $asTypeInfo)) $asResult[$sType][$sInfo] = $asTypeInfo[$sInfo];
else $asResult[$sType][$sInfo] = $asTypeInfo[$sInfo];
} }
if($bUnique) $asResult[$sType] = $asResult[$sType][$sInfo]; if($bUnique) $asResult[$sType] = $asResult[$sType][$sInfo];
} }
@@ -808,7 +805,7 @@ class Databap extends PhpObject
return $asPost; return $asPost;
} }
private function getRemotePageDom($sUrl) private function getRemotePageDom($sUrl): DOMDocument
{ {
$oDom = new DOMDocument(); $oDom = new DOMDocument();
if(mb_substr($sUrl, 0, 4)!='http') $sUrl = 'http://'.$sUrl; if(mb_substr($sUrl, 0, 4)!='http') $sUrl = 'http://'.$sUrl;
@@ -1769,7 +1766,7 @@ class Databap extends PhpObject
} }
else $sDesc = 'Nom de chan non autorisé (nom de personne / nom de société interdit)'; else $sDesc = 'Nom de chan non autorisé (nom de personne / nom de société interdit)';
return self::getJsonPostResult($bSuccess, $sDesc, $asVars); return $this->getJsonPostResult($bSuccess, $sDesc, $asVars);
} }
private function isUserConnected($iChanId=0, $iUserId=0) private function isUserConnected($iChanId=0, $iUserId=0)
@@ -2274,12 +2271,15 @@ class Databap extends PhpObject
else //Normal message else //Normal message
{ {
//Internal links //Internal links
$asMessages['messages'][$iMessageId]['message'] = Toolbox::findReplaceLinks($asMessages['messages'][$iMessageId]['message']); $sFormatedMsg = Toolbox::findReplaceLinks($asMessages['messages'][$iMessageId]['message']);
//Dynamic chan link //Dynamic chan link
$asPatterns = '/(^|\s)#(\w*[^\s]+\w*)/u'; $asPatterns = '/(^|\s)#(\w*[^\s]+\w*)/u';
$asLinks = '\1<span class="chan_link clickable">#<span class="chan_text">\2</span></span>'; $asLinks = '\1<span class="chan_link clickable">#<span class="chan_text">\2</span></span>';
$asMessages['messages'][$iMessageId]['message'] = preg_replace($asPatterns, $asLinks, $asMessages['messages'][$iMessageId]['message']); $sFormatedMsg = preg_replace($asPatterns, $asLinks, $sFormatedMsg);
if($asMessages['messages'][$iMessageId]['message'] != $sFormatedMsg) $asMessages['messages'][$iMessageId]['message_original'] = $asMessages['messages'][$iMessageId]['message'];
$asMessages['messages'][$iMessageId]['message'] = $sFormatedMsg;
} }
} }
@@ -2844,7 +2844,7 @@ class Databap extends PhpObject
public function getUrlAvailability($sLink) public function getUrlAvailability($sLink)
{ {
$bAvailable = !$this->checkValue(self::URL_TABLE, array('phrase'=>$sLink)); $bAvailable = !$this->checkValue(self::URL_TABLE, array('phrase'=>$sLink));
return self::getJsonPostResult($bAvailable, ''); return $this->getJsonPostResult($bAvailable, '');
} }
public function resetChanSafeNames() public function resetChanSafeNames()
@@ -2911,8 +2911,8 @@ class Databap extends PhpObject
//Inserting Color Anchors //Inserting Color Anchors
$asDefaultValues = $this->getDefaultOptionValues($asStyleParams, false); $asDefaultValues = $this->getDefaultOptionValues($asStyleParams, false);
foreach($asDefaultValues as $iOptionNameId=>$sDefaultValue) $asColorAnchors[$iOptionNameId] = '[OPT#'.$iOptionNameId.']'; foreach($asDefaultValues as $iOptionNameId=>$sDefaultValue) $asColorAnchors[$iOptionNameId] = '[OPT#'.$iOptionNameId.']';
$sStyle = str_replace($asDefaultValues, $asColorAnchors, $sStyle); $sStyle = str_ireplace($asDefaultValues, $asColorAnchors, $sStyle);
//Switching color Anchors with user colors //Switching color Anchors with user colors
$asOptionvalues = $this->getUserOptions($asStyleParams); $asOptionvalues = $this->getUserOptions($asStyleParams);

View File

@@ -46,8 +46,8 @@ class Reader extends PhpObject
'CASERESPECTING','CASTING','CENTERED','CHAIN','CHANGE','CHANGING','CHARACTER','CHECK','CHECKBOX', 'CASERESPECTING','CASTING','CENTERED','CHAIN','CHANGE','CHANGING','CHARACTER','CHECK','CHECKBOX',
'CHECKBOXSYMBOLICONLINE','CLASS','CLASS-DATA','CLASS-EVENTS','CLASS-METHODS','CLEANUP','CLEAR','CLIENT','CLOCK', 'CHECKBOXSYMBOLICONLINE','CLASS','CLASS-DATA','CLASS-EVENTS','CLASS-METHODS','CLEANUP','CLEAR','CLIENT','CLOCK',
'CODE','COL_BACKGROUND','COL_HEADING','COL_NORMAL','COL_TOTAL','COLLECT','COLOR','COLUMN','COMMENT','COMMIT', 'CODE','COL_BACKGROUND','COL_HEADING','COL_NORMAL','COL_TOTAL','COLLECT','COLOR','COLUMN','COMMENT','COMMIT',
'COMMON','COMMUNICATION','COMPARING','COMPONENTS','COMPUTE','CONCATENATE','CONDENSE','CONSTANTS','CONTEXT', 'COMMON','COMMUNICATION','COMPARING','COMPONENTS','COMPUTE','CONCATENATE', 'COND', 'CONDENSE','CONSTANTS','CONTEXT',
'CONTEXTS','CONTINUE','CONTROL','CONTROLS','CONVERSION','CONVERT','COUNTRY','COUNTY','CURRENT','CURSOR', 'CONTEXTS','CONTINUE','CONTROL','CONTROLS','CONVERSION', 'CONV', 'CONVERT','COUNTRY','COUNTY','CURRENT','CURSOR',
'CUSTOMER-FUNCTION','DATA','DATABASE','DATASET','DATE','DEALLOCATE','DECIMALS','DEFAULT','DEFAULTUTF-8NON-UNICODE', 'CUSTOMER-FUNCTION','DATA','DATABASE','DATASET','DATE','DEALLOCATE','DECIMALS','DEFAULT','DEFAULTUTF-8NON-UNICODE',
'DEFERRED','DEFINE','DEFINING','DEFINITION','DELETE','DELETING','DEMAND','DESCENDING','DESCRIBE','DESTINATION', 'DEFERRED','DEFINE','DEFINING','DEFINITION','DELETE','DELETING','DEMAND','DESCENDING','DESCRIBE','DESTINATION',
'DIALOG','DIRECTORY','DISTANCE','DISTINCT','DIVIDE-CORRESPONDING','DO','DUPLICATE','DUPLICATES','DURING','DYNAMIC', 'DIALOG','DIRECTORY','DISTANCE','DISTINCT','DIVIDE-CORRESPONDING','DO','DUPLICATE','DUPLICATES','DURING','DYNAMIC',
@@ -104,7 +104,8 @@ class Reader extends PhpObject
'quote' => array('&quot;', '&quot;'), 'quote' => array('&quot;', '&quot;'),
'quot2' => array('&#039;', '&#039;'), 'quot2' => array('&#039;', '&#039;'),
'pipe' => array('|', '|'), 'pipe' => array('|', '|'),
'curly' => array('{', '}') 'curly' => array('{', '}'),
'tick' => array('`', '`')
), ),
'iNumber'=>array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0'), 'iNumber'=>array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0'),
'wExpand'=>array('loop'=>'endloop', 'if'=>'endif'), 'wExpand'=>array('loop'=>'endloop', 'if'=>'endif'),

View File

@@ -945,19 +945,16 @@ function getMessage(message_info, bReset)
$Msg.find('a').addClass('img_box').append($Banner); $Msg.find('a').addClass('img_box').append($Banner);
} }
if(message_info.edited) {
}
//Adding message to channel panel //Adding message to channel panel
$Message = $('<p>', {'class':message_info.msg_class+' class_'+sChanKeyName+' hide round_right', 'data-id':message_info.id, 'data-id-user':message_info.id_user}) $Message = $('<p>', {'class':message_info.msg_class+' class_'+sChanKeyName+' hide round_right', 'data-id':message_info.id, 'data-id-user':message_info.id_user})
.data('orig_msg', message_info.message) .data('orig_msg', message_info.message_original || message_info.message)
.data('disp_msg', message_info.message)
.append($('<span>', {'class':'time'}).text(((message_info.date==databap.consts.cur_date)?'':message_info.date+' - ')+message_info.time)) .append($('<span>', {'class':'time'}).text(((message_info.date==databap.consts.cur_date)?'':message_info.date+' - ')+message_info.time))
.append($Msg) .append($Msg)
.append($('<span>', {'class':'status'}).text('modifié')); .append($('<span>', {'class':'status'}).text('modifié'));
$Message.find('.chan_link').click(function(){joinChan($(this).find('.chan_text').text());}); $Message.find('.chan_link').click(function(){joinChan($(this).find('.chan_text').text());});
$Message.find('.user').click(setPm); $Message.find('.user').click(setPm);
$Message.find('.editable').hover(toggleEditButton).click(onMessageEditClick); $Message.find('.editable').on('mouseenter', toggleEditButton).on('mouseleave', toggleEditButton).click(onMessageEditClick);
if(message_info.edited) $Message.find('.status').show(); if(message_info.edited) $Message.find('.status').show();
} }
@@ -998,6 +995,7 @@ function addMessage(message_info, bReset) {
let oOrigMsg = databap.tmp(['messages', message_info.id_message_ref]); let oOrigMsg = databap.tmp(['messages', message_info.id_message_ref]);
if(oOrigMsg) { if(oOrigMsg) {
oOrigMsg.message = message_info.message; oOrigMsg.message = message_info.message;
oOrigMsg.message_original = message_info.message_original || message_info.message;
oOrigMsg.msg_class = message_info.msg_class; oOrigMsg.msg_class = message_info.msg_class;
oOrigMsg.edited = true; oOrigMsg.edited = true;
@@ -1039,61 +1037,64 @@ function addMessage(message_info, bReset) {
} }
} }
function toggleEditButton() function toggleEditButton(eEvent)
{ {
let $Editable = $(this); //.editable let $Editable = $(this); //.editable
let $EditBtn = $Editable.next('.edit-btn'); let $EditBtn = $Editable.next('.edit-btn')
if($EditBtn.length > 0) $EditBtn.remove(); if(eEvent.type == 'mouseleave' && $EditBtn.length > 0) $EditBtn.remove();
else $Editable.after($('<span>', {'class':'text edit-btn'}).append($('<i>', {'class': 'fa fa-fw fa-c-edit'}))); if(eEvent.type == 'mouseenter' && $EditBtn.length == 0) $Editable.after($('<span>', {'class':'text edit-btn'}).append($('<i>', {'class': 'fa fa-fw fa-c-edit'})));
} }
function onMessageEditClick() function onMessageEditClick(eClick)
{ {
let $Editable = $(this); let $Editable = $(this);
let $Message = $Editable.parents('p'); let $Message = $Editable.parents('p');
let bPrivate = $Message.hasClass('P'); let bPrivate = $Message.hasClass('P');
let sDisplayedMsg = $Editable.text(); let sDisplayedMsg = $Message.data('disp_msg');
let sOriginalMsg = $Message.data('orig_msg'); let sOriginalMsg = $Message.data('orig_msg');
let bEditing = ($Editable.prop('contenteditable') == 'true');
$Editable if(!bEditing && !eClick.ctrlKey) {
.prop('contenteditable', 'true') $Editable
.data('disp_msg', sDisplayedMsg) .prop('contenteditable', 'true')
.focus(); .focus();
if(sDisplayedMsg != sOriginalMsg) { if(sDisplayedMsg != sOriginalMsg) {
let iCaretPos = getCaretPosition($Editable[0]); //let iCaretPos = getCaretPosition($Editable[0]);
$Editable.text(sOriginalMsg); $Editable.text(sOriginalMsg);
setCaretPosition($Editable[0], iCaretPos + sOriginalMsg.indexOf(sDisplayedMsg)); //setCaretPosition($Editable[0], iCaretPos + sOriginalMsg.indexOf(sDisplayedMsg));
} }
if(bPrivate) $Message.find('.console').hide();
$Editable if(bPrivate) $Message.find('.console').hide();
.off('focusout keydown keyup')
.keyup(function(e) { $Editable
if(e.keyCode == 9) { .off('focusout keydown keyup')
e.preventDefault(); .keyup(function(e) {
keyController(e, this); if(e.keyCode == 9) {
} e.preventDefault();
}) keyController(e, this);
.on('focusout keydown', function(e) { }
let $This = $(this); })
if(e.type == 'focusout' || e.which == 13) { .on('focusout keydown', function(e) {
e.preventDefault(); let $This = $(this);
let $Message = $Editable.parents('p'); if(e.type == 'focusout' || e.which == 13) {
let sOldMsg = $Message.data('orig_msg'); e.preventDefault();
let sNewMsg = $This.text(); let $Message = $Editable.parents('p');
let sOldMsg = $Message.data('orig_msg');
let sNewMsg = $This.text();
if(sOldMsg != sNewMsg) {
$This.prop('contenteditable', 'false'); $This.prop('contenteditable', 'false');
editMessage($This.parents('p').data('id'), sNewMsg); if(sOldMsg != sNewMsg) {
editMessage($This.parents('p').data('id'), sNewMsg);
}
else {
$This.html($Message.data('disp_msg'));
$Message.find('.console').show();
}
} }
else { else if(e.keyCode == 9) e.preventDefault();
$This.text($This.data('disp_msg')); });
$Message.find('.console').show(); }
}
}
else if(e.keyCode == 9) e.preventDefault();
});
} }
function editMessage(iMsgId, sNewMsg) function editMessage(iMsgId, sNewMsg)

View File

@@ -8,6 +8,7 @@
<script type="text/javascript"> <script type="text/javascript">
databap.pageInit = function() databap.pageInit = function()
{ {
/*
databap.tmp('note', 'integer'); databap.tmp('note', 'integer');
var $Frame = $('#note_frame'); var $Frame = $('#note_frame');
@@ -34,6 +35,21 @@ databap.pageInit = function()
databap.tmp('note', iNote); databap.tmp('note', iNote);
} }
*/
$('#note_id')
.addDefaultValue('N° note')
.on('keyup', function() {
$('#submit').attr('href', 'https://me.sap.com/notes/'+$('#note_id').val());
});
$('#note_form').addButton('ok', 'Ok', '', 'submit', 'heavy');
var iNote = databap.vars.id;
if(isNumeric(iNote) && iNote > 0) {
self.addBufferIcon();
$('#note_id').val(iNote).focus();
self.goToExternalLink('https://me.sap.com/notes/'+iNote);
}
} }
/* /*