implement media edit

This commit is contained in:
Dennis Eichhorn 2020-02-02 18:07:26 +01:00
parent e4721c620c
commit 7a7f7489b1
3 changed files with 120 additions and 53 deletions

View File

@ -16,6 +16,9 @@ import { FormView } from '../../Views/FormView.js';
* @version 1.0.0 * @version 1.0.0
* @since 1.0.0 * @since 1.0.0
* *
* data-ui-content = what is the main parent
* data-ui-element = what are the elements to replace
*
* @tood Orange-Management/jsOMS#60 * @tood Orange-Management/jsOMS#60
* On change listener * On change listener
* Allow to add a on change listener in a form. This should result in automatic submits after changing a form. * Allow to add a on change listener in a form. This should result in automatic submits after changing a form.
@ -758,10 +761,6 @@ export class Form
); );
});*/ });*/
/**
* @todo Orange-Management/jsOMS#86
* On edit replace add button with save and cancel
*/
jsOMS.addClass(this, 'hidden'); jsOMS.addClass(this, 'hidden');
const saveButtons = self.forms[id].getSave(); const saveButtons = self.forms[id].getSave();
@ -859,7 +858,8 @@ export class Form
} }
parentsContent.push( parentsContent.push(
selector.length === 0 ? this.closest(closest) : this.closest(closest).querySelector(subSelector) selector.length === 0 ? this.closest(closest) : this.closest(closest).querySelector(subSelector).parentNode
/* parentNode because of media edit. maybe I need a data-ui-parent element? */
); );
values = values.concat( values = values.concat(
@ -930,6 +930,7 @@ export class Form
} }
} }
// todo bind failure here, if failure do cancel, if success to remove edit template
self.submit(self.forms[id]); self.submit(self.forms[id]);
self.removeEditTemplate(this, id); self.removeEditTemplate(this, id);
}); });
@ -1134,10 +1135,10 @@ export class Form
case 'pre': case 'pre':
case 'article': case 'article':
case 'section': case 'section':
src.innerHTML = value; src.innerHTML = jsOMS.htmlspecialchars_encode(value);
break; break;
default: default:
src.value = value; src.value = jsOMS.htmlspecialchars_decode(value);
} }
}; };
@ -1148,13 +1149,13 @@ export class Form
case 'pre': case 'pre':
case 'article': case 'article':
case 'section': case 'section':
src.innerHTML = value; src.innerHTML = jsOMS.htmlspecialchars_encode(value);
break; break;
case 'textarea': case 'textarea':
// textarea only has value data in it's content and nothing else! // textarea only has value data in it's content and nothing else!
break; break;
default: default:
src.value = value; src.value = jsOMS.htmlspecialchars_decode(value);
} }
}; };

View File

@ -57,6 +57,61 @@
return str.replace(new RegExp("^[" + char + "]*"), ''); return str.replace(new RegExp("^[" + char + "]*"), '');
}; };
jsOMS.htmlspecialchars = [
['&', '&'],
['<', '&lt;'],
['>', '&gt;'],
['"', '&quot;']
];
/**
* Encode none-html string
*
* @param {string} str String to encode
*
* @return {string}
*
* @since 1.0.0
*/
jsOMS.htmlspecialchars_encode = function(str)
{
let escaped = str;
const length = jsOMS.htmlspecialchars.length;
for (let i = 0; i < length; ++i) {
escaped = escaped.replace(
new RegExp(jsOMS.htmlspecialchars[i][0], 'g'),
jsOMS.htmlspecialchars[i][1]
);
}
return escaped;
};
/**
* Decode html string
*
* @param {string} str String to encode
*
* @return {string}
*
* @since 1.0.0
*/
jsOMS.htmlspecialchars_decode = function(str)
{
let decoded = str;
const length = jsOMS.htmlspecialchars.length;
for (let i = 0; i < length; ++i) {
decoded = decoded.replace(
new RegExp(jsOMS.htmlspecialchars[i][1], 'g'),
jsOMS.htmlspecialchars[i][0]
);
}
return decoded;
};
/** /**
* Validate json string * Validate json string
* *
@ -158,31 +213,4 @@
return haystack.slice(min); return haystack.slice(min);
}; };
/**
* Encodes special html characters
*
* @param {string} text String to encode
* @param {boolean} quotes Should quotes be allowed
*
* @return {string}
*
* @since 1.0.0
*/
jsOMS.htmlspecialchars = function (text, quotes) {
let map = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#039;'
};
if (quotes) {
map['"'] = '"';
map["'"] = "'";
}
return text.replace(/[&<>"']/g, function(m) { return map[m]; });
};
}(window.jsOMS = window.jsOMS || {})); }(window.jsOMS = window.jsOMS || {}));

View File

@ -123,6 +123,61 @@
return str.replace(new RegExp("^[" + char + "]*"), ''); return str.replace(new RegExp("^[" + char + "]*"), '');
}; };
jsOMS.htmlspecialchars = [
['&', '&amp;'],
['<', '&lt;'],
['>', '&gt;'],
['"', '&quot;']
];
/**
* Encode none-html string
*
* @param {string} str String to encode
*
* @return {string}
*
* @since 1.0.0
*/
jsOMS.htmlspecialchars_encode = function(str)
{
let escaped = str;
const length = jsOMS.htmlspecialchars.length;
for (let i = 0; i < length; ++i) {
escaped = escaped.replace(
new RegExp(jsOMS.htmlspecialchars[i][0], 'g'),
jsOMS.htmlspecialchars[i][1]
);
}
return escaped;
};
/**
* Decode html string
*
* @param {string} str String to encode
*
* @return {string}
*
* @since 1.0.0
*/
jsOMS.htmlspecialchars_decode = function(str)
{
let decoded = str;
const length = jsOMS.htmlspecialchars.length;
for (let i = 0; i < length; ++i) {
decoded = decoded.replace(
new RegExp(jsOMS.htmlspecialchars[i][1], 'g'),
jsOMS.htmlspecialchars[i][0]
);
}
return decoded;
};
/** /**
* Count string in string * Count string in string
* *
@ -525,23 +580,6 @@
return haystack.slice(min); return haystack.slice(min);
}; };
jsOMS.htmlspecialchars = function (text, quotes) {
let map = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#039;'
};
if (quotes) {
map['"'] = '"';
map["'"] = "'";
}
return text.replace(/[&<>"']/g, function(m) { return map[m]; });
};
jsOMS.nearest = function (e, selector) { jsOMS.nearest = function (e, selector) {
// same level first // same level first
// parent level second // parent level second