Linux add new line before and after a matched pattern - linux

I want to put newline before "< script" and after < /script> tags in an HTML file.
sed 's/<script/\'$'\n/g'
I tried that one but it deleted "script" tags.
Sample input:
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>JavaScript Ders 2</title> <script type="text/javascript" src="script.js" language="javascript"></script> <script type="text/javascript" src="script.js" language="javascript"></script> <script></script> </head><body> <script type="text/javascript" src="script.js" language="javascript"></script> </body></html>
Sample output:
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>JavaScript Ders 2</title>
<script type="text/javascript" src="script.js" language="javascript">
</script>
<script type="text/javascript" src="script.js" language="javascript">
</script>
<script>
</script>
</head><body>
<script type="text/javascript" src="script.js" language="javascript">
</script>
</body></html>
What I have to do?
Thanks

I'm assuming you're just doing this to make it easier to read, rather than attempting to format HTML using sed...
To add newlines before <script and </script (assuming that your version of sed understands \n):
sed -E 's|</?script|\n&|g' file
Match </?script (/? makes the / optional) and replace with a newline, followed by the full match &.
It doesn't quite match the output in your question since it looks like you want to put each opening/closing <script> tag on its own line, rather than just insert lines:
$ sed -E 's|</?script|\n&|g' file
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>JavaScript Ders 2</title>
<script type="text/javascript" src="script.js" language="javascript">
</script>
<script type="text/javascript" src="script.js" language="javascript">
</script>
<script>
</script> </head><body>
<script type="text/javascript" src="script.js" language="javascript">
</script> </body></html>

Since you haven't posted any samples so couldn't test it, could you please try following and let me know then.
sed 's/<script>/\n&/;s/<\/script>/&\n/' Input_file
Let's say following is Input_file:
cat Input_file
<script>
fewvfewvvew
</script>
abcd
Then after executing code we will get following output then.
<script>
fewvfewvvew
</script>
abcd

Related

JSF app with the error: Uncaught ReferenceError: RichFaces is not defined

An application is migrated and now there is an issue when een page is opened and in the console I see the error: "Uncaught ReferenceError: RichFaces is not defined"
It's a Java application on a Weblogic server.
JSF is old, but the application is new to me, I haven't build the application.
This is a part of the code:
<?xml version="1.0" encoding="UTF-8"?>
<f:view
contentType="text/html"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:win="http://winter.ba.uwv.nl/winter"
>
<html>
<h:head>
...
<script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
<h:outputScript name="/javascript/jquery.timers.js" target="head" />
<h:outputScript name="/javascript/preloadCssImages.jQuery_v5.js" target="head" />
<h:outputScript name="/javascript/tooltip.js" target="head" />
<rich:jQuery />
<ui:remove><!-- Disable the a4j:loadStyle tags and enable the link tag to use plain setup --> </ui:remove>
<ui:insert name="head"/>
<h:outputScript target="head">
jQuery(document).ready(function() {
jQuery.preloadCssImages();
...
});
</h:outputScript>
</h:head>
<h:body>
...
The line <rich:jQuery /> is resulting in:
<span id="j_idt7" style="display: none;">
<script type="text/javascript">RichFaces.ui.jQueryComponent.query();</script>
</span>
And the line RichFaces.ui.jQueryComponent.query(); is resulting in the error:
Uncaught ReferenceError: RichFaces is not defined
at home.xhtml:13:152
(anonymous) # home.xhtml:13
I don't understand why a <span...> tag is added in the head?
It seems to me, but I'm not sure an artifact is missing. I have tried to add the following artifacts to my pom.xml file:
richfaces
richfaces-components-ui
richfaces-ui
richfaces-components-ui
richfaces-ui-core-ui
Has someone an idea how to solve "Uncaught ReferenceError: RichFaces is not defined" error?
---- UPDATE (after the Answer of Makhiel) ----
If we do not add the line rich:JQuery and the page is opnening than an jquery spinner is started, which never ends. It 'hangs' with this error:
Uncaught TypeError: jQuery.preloadCssImages is not a function
at HTMLDocument. (userList.xhtml:17:28)
at l (jquery-1.8.3.min.js:2:16996)
at Object.fireWith [as resolveWith] (jquery-1.8.3.min.js:2:17783)
at Function.ready (jquery-1.8.3.min.js:2:12504)
at HTMLDocument.A (jquery-1.8.3.min.js:2:9909)
This is the output in the browser and at line 13 there is the line which is mentioned by #Makhiel. Right after that line, is the line which gives the error: RichFaces.ui.jQueryComponent.query();.
<html>
<head id="j_idt2">
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
/* Fix image caching problem */
try { document.execCommand("BackgroundImageCache", false, true); } catch(err) {}
</script>
<title>Winter</title>
<link rel="icon" href="/winter/favicon.ico" type="image/x-icon" />
<script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
<!-- This is the line of Makhiel mentioned, so it exists -->
<script type="text/javascript" src="/org.richfaces.resources/javax.faces.resource/org.richfaces.staticResource/4.5.17.Final/PackedCompressed/packed/packed.js"></script>
<span id="j_idt9" style="display: none;">
<script type="text/javascript">RichFaces.ui.jQueryComponent.query();</script>
</span>
...
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/jquery.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/richfaces.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/richfaces-base-component.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/jquery.component.js">
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery.preloadCssImages();
//perhaps add delay
...
});
</script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/richfaces-queue.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/status.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/toolbar.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/richfaces-event.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/togglePanel.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/togglePanelItem.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/collapsiblePanel.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/collapsiblePanelItem.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/message.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/jquery.position.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/richfaces-utils.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/richfaces-selection.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/AutocompleteBase.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/Autocomplete.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/popupPanel.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/popupPanelBorders.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/popupPanelSizer.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/component-control.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/popup.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/menuKeyNavigation.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/menu-base.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/menu.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/menugroup.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/menuitem.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/contextmenu.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/tooltip.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/datatable.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/jquery.mousewheel.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/extendedDataTable.js"></script>
<script type="text/javascript" src="/winter/org.richfaces.resources/javax.faces.resource/org.richfaces/datascroller.js"></script>
...
</head>
<body>
...
rich:jQuery without any attributes doesn't do anything, so you might as well delete it.
You shouldn't need to add anything in your POM, if JSF didn't know what the richfaces tag was it wouldn't be translating it.
Your generated <head> should contain RichFaces JS sources, something like:
<script type="text/javascript" src="/org.richfaces.resources/javax.faces.resource/org.richfaces.staticResource/4.5.17.Final/PackedCompressed/packed/packed.js"></script>
This is where the RichFaces object is defined, if it's not on your page (and it sounds like it isn't) you might have a filter in place that blocks it.

How to use preact using html and script tag?

I have a very simple react program that imports react using a script command and a cdn.
How do I covert it to preact while keeping the same structure?
I tried to follow these instruction, but they weren't very clear
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://unpkg.com/react#15/dist/react.js"> </script>
<script src="https://unpkg.com/react-dom#15/dist/react-dom.js"></script>
<script src="https://unpkg.com/babel-standalone#6.15.0/babel.js"></script>
</head>
<style type="text/css">
</style>
<body>
<div id='root'></div>
<script type="text/babel">
function T(props){
return <h1>{props.title}</h1>
}
ReactDOM.render(<T title='welcome'/>,document.getElementById('root'))
</script>
</body>
</html>
As per this github issue you have a couple of different options for using Preact with a script tag. You can directly call h- Preact's version of React.createElement or you can use babel standalone to transform your JSX as you were in your original React example. Here is a Preact conversion of your original example.
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/preact/7.2.0/preact.js"></script>
<script src="https://unpkg.com/babel-standalone#6.15.0/babel.js"></script>
</head>
<body>
<div id='root'></div>
<!-- option 1: alias it -->
<script>window.React = { createElement: preact.h }</script>
<script type="text/babel">
function T(props){
return <h1>{props.title}</h1>
}
preact.render(<T title="Welcome" />, document.getElementById('root'));
</script>
</body>
</html>

Remove newline before a match - Linux

I want to remove the newline before the </script> in my HTML file with a Linux command (sed, awk...).
Sample input:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript Ders 2</title>
<script type="text/javascript" src="script1.js" language="javascript">
</script>
<script type="text/javascript" src="script2.js" language="javascript">
</script>
<script>
// script kodumuz buraya yazılacak
</script>
</head>
<body>
<script type="text/javascript" src="script3.js" language="javascript">
</script>
</body>
</html>
Sample output:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript Ders 2</title>
<script type="text/javascript" src="script1.js" language="javascript"> </script>
<script type="text/javascript" src="script2.js" language="javascript"> </script>
<script>
// script kodumuz buraya yazılacak</script>
</head>
<body>
<script type="text/javascript" src="script3.js" language="javascript"> </script>
</body>
</html>
I tried different syntax, but none of them could do.
First of all, as mentioned in the comments Don't parse XML with Regex! Never do it, never think about it. Make it a habit not to think about it! Sometimes it might look to be a simple task that can be performed with sed or awk or any other regex parser, but no ...
What you can do, on the other hand—if you really want to use sed or awk — processes the file first with xmlstarlet and convert it into a PYX format.
The PYX format is a line-oriented representation of
XML documents that is derived from the SGML ESIS format.
(see ESIS - ISO 8879 Element Structure Information Set spec,
ISO/IEC JTC1/SC18/WG8 N931 (ESIS))
So what you realy want to do is something like :
$ xmlstarlet pyx <file.html> | do_your_magic_here | xmlstarlet depyx > file.new.html
In your case this would be something like:
$ xmlstarlet pyx file.html \
| awk 'c~/^- *\\n *$/&&/^)script$/{c=$0;next}{print c; c=$0}END{print c}' \
| xmlstarlet depyx
This will output
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta>
<title>JavaScript Ders 2</title>
<script language="javascript" src="script1.js" type="text/javascript"></script>
<script language="javascript" src="script2.js" type="text/javascript"></script>
<script>
// script kodumuz buraya yazılacak
</script>
</head>
<body>
<script language="javascript" src="script3.js" type="text/javascript"></script>
</body>
</html>
This might work for you (GNU sed):
sed 'N;s/\n\(<\/script>\)/\1/;P;D' file
Keep a window of two lines throughout the file and if the second line begins with </script>, remove the preceding newline.

SP2013 SharePoint-hosted app Modal Dialog Error: Cannot read 'hiddenButtonValueBeforeDialog'

I'm just trying to prove the concept of displaying a modal dialog in my SharePoint-hosted app page. I believe I've included the required js libraries and I give it more than enough time to load the libraries before I execute my function. The error I receive is:
Cannot read property 'hiddenButtonValueBeforeDialog' of undefined
I believe I have the libraries I need::
<script type="text/javascript" src="/_layouts/15/init.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.js"></script>
<script type="text/javascript" src="/_layouts/15/SP.UserProfiles.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.core.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.ui.dialog.js"></script>
Javascript:
function showDialog() {
var optDict = {
width: 800,
height: 500,
url: 'http://www.google.com',
title: "Upload your file"
};
try {
SP.UI.ModalDialog.showModalDialog(optDict);
}
catch (err) {
alert(err.message);
}
return false;
}
The error Cannot read property 'hiddenButtonValueBeforeDialog' of undefined occurs since the sp.ui.dialog.js is globalized JavaScript library and the required resource file SP.Res.resx has not been loaded on the client side (SP.Res.hiddenButtonValueBeforeDialog is generated from this file).
Solution
ScriptResx HTTP Handler is used to load the content of resource
files on the client side, the following line has to added:
<script type="text/javascript" src="/_layouts/15/ScriptResx.ashx?name=sp.res&culture=en-us"></script>
In addition, since there is a dependency for SP.UI.UIUtility
namespace in sp.ui.dialog.js library, the sp.init.js JavaScript
library has to be referenced:
<script type="text/javascript" src="/_layouts/15/sp.init.js"></script>
I added all these references in PlaceHolderMain
<script src="/_layouts/15/1033/init.js" type="text/javascript"></script>
<script src="/_layouts/15/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/_layouts/15/ie55up.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.core.js" type="text/javascript"></script>
<script type="text/javascript" src="/_layouts/15/ScriptResx.ashx?name=sp.res&culture=en-us"></script>
<script type="text/javascript" src="/_layouts/15/sp.init.js"></script>
<script src="/_layouts/15/sp.ui.dialog.js" type="text/javascript"></script>
<script src="/_layouts/15/core.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.runtime.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.js" type="text/javascript"></script>
<script src="/_layouts/15/inplview.js" type="text/javascript"></script>
<script src="/_layouts/15/cui.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.ribbon.js" type="text/javascript"></script>
<script src="/_layouts/15/mdn.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.ui.pub.ribbon.js" type="text/javascript"></script>
<script src="/_layouts/15/msstring.js" type="text/javascript"></script>
<script src="/_layouts/15/socialdata.js" type="text/javascript"></script>
<script src="/_layouts/15/sp.ui.socialribbon.js" type="text/javascript"></script>
<script src="/_layouts/15/cui.js" type="text/javascript"></script>
<script src="/_layouts/15/wpadder.js" type="text/javascript"></script>
<script src="/_layouts/15/search.js" type="text/javascript"></script>
Now all javascript errors are gone

Object doesn't support property or method 'autocomplete'

I am getting the above mentioned error. Below is my code snippet.
<link rel="stylesheet" href="/css/autoComplete/jquery-ui.css" />
<link rel="stylesheet" href="/css/core.css">
<link rel="stylesheet" href="css/theme.css">
<link rel="stylesheet" href="/css/datepicker.css">
<link rel="stylesheet" href="/css/customlook.css">
<link rel='stylesheet' href='/css/Header.css' />
<link rel='stylesheet' href='/css/Test.css' />
<script type="text/javascript" src="/js/autoComplete/jquery.min.js"></script>
<script type="text/javascript" src="/js/autoComplete/jquery-ui.min.js"></script>
<script type="text/javascript" src="/js/advanced_search_filters.js"></script>
<script type="text/javascript" src="/js/dateJs/jquery.js"></script>
<script type="text/javascript" src="/js/dateJs/core.js"></script>
<script type="text/javascript" src="/js/dateJs/datepicker.js"></script>
<script type="text/javascript" src="/js/user.js"></script>
<script type="text/javascript" src="/js/utils.js"></script>
<script type="text/javascript">
$(document).ready(function() {
alert('testing');
$("#CARD_HOLDER_NAME").autocomplete({
source : '${pageContext. request. contextPath}/cardHolderName'
});
});
</script>
Please help me to resolve it.
You're missing/wrongly placed jQuery/ jQuery UI.js/ autocomplete.js files and the order should be
(1) jQuery.js
(2) jQuery UI.js
(3) autocomplete.js
Add the following before autocomplete
<script src="http://code.jquery.com/jquery-1.9.1.js />
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js" />

Resources