Initial commit

This commit is contained in:
2013-08-07 14:39:34 +02:00
commit 62cdc8b339
37 changed files with 2155 additions and 0 deletions

3
.htaccess Normal file
View File

@@ -0,0 +1,3 @@
## Jul - deny access to the top-level git repository
RewriteEngine On
RewriteRule \.git - [F,L]

BIN
aescrawl.ttf Executable file

Binary file not shown.

19
background.php Executable file
View File

@@ -0,0 +1,19 @@
<?php
define('IMAGE_PATH', 'images/');
//background selection
$asImages = glob(IMAGE_PATH.'{*.jpg,*.png,*.jpeg,*.gif}', GLOB_BRACE);
$sRandomImagePath = $asImages[array_rand($asImages)];
//get type
$sFileInfo = pathinfo($sRandomImagePath);
$sExt = strtolower($sFileInfo['extension']);
if($sExt=='jpg')
{
$sExt = 'jpeg';
}
//display image
header("Content-type: image/$sExt");
echo file_get_contents($sRandomImagePath);

1362
config.php Executable file

File diff suppressed because it is too large Load Diff

54
functions.js Executable file
View File

@@ -0,0 +1,54 @@
function emptyBox(element, text)
{
//var textarea = $('#thoughts_form textarea[name="thoughts"]');
if(element.value == text)
{
element.value = '';
}
else if(element.value == '')
{
element.value = text;
}
}
function setHeight(element)
{
var padtext = element.value;
var height = Math.max(300, 130 + Math.round((padtext.length / 85 + padtext.split("\n").length) * 20));
//alert(height);
element.style.height = height+'px';
}
function goTo(url)
{
window.location.href = url;
}
function addInput(form, name, type, value)
{
var registerInput = document.createElement('input');
registerInput.setAttribute('type', type);
registerInput.setAttribute('name', name);
registerInput.setAttribute('value', value);
document.forms[form].appendChild(registerInput);
}
/*
texts = new Object();
texts['thoughts'] = 'Talk to me.';
texts['login'] = 'Nickname';
texts['pass'] = 'Password';
window.onload = function ()
{
for (i in texts)
{
var id = document.getElementById(i);
if(id)
{
id.addEventListener('focus', function() {emptyBox(this, texts[this.name]);}, false);
id.addEventListener('blur', function() {emptyBox(this, texts[this.name]);}, false);
}
}
};
*/

BIN
images/bubble.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
images/bubble_inverted.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
images/button_left.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
images/button_left_hover.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
images/button_middle.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

BIN
images/button_middle_hover.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 B

BIN
images/button_right.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
images/button_right_hover.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
images/error.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
images/favicon.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
images/favicon2.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
images/logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
images/minicloud.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
images/minicloud_active.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
images/minicloud_disabled.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
images/minicloud_hover.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
images/pad_bottom.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
images/pad_line.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

BIN
images/pad_top.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
images/writing_cloud.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

109
index.php Executable file
View File

@@ -0,0 +1,109 @@
<?php
//load classes
session_start();
require_once 'config.php';
//clean sent values
cleanPost($_POST);
cleanPost($_GET);
cleanPost($_REQUEST);
/* Reserved Variables and Default Values */
//general
$sPage = (isset($_GET['p']) && $_GET['p']!='')?$_GET['p']:'w';
$sPostToken = isset($_POST['post_token'])?$_POST['post_token']:'';
//logon
$sLogin = (isset($_POST['login']) && $_POST['login']!='Nickname')?$_POST['login']:'';
$sPass = (isset($_POST['pass']) && $_POST['pass']!='Password')?$_POST['pass']:'';
$bRegister = (isset($_POST['register']) && $_POST['register']==1);
//writing pad
$sThought = isset($_POST['thoughts'])?$_POST['thoughts']:'';
$iThoughtId = (isset($_POST['thought_id']) && $_POST['thought_id']!='')?$_POST['thought_id']:0; //update or insert
$bFinishedWriting = isset($_POST['finished']);
//calendar
$iDay = isset($_GET['d'])?$_GET['d']:date(MyThoughts::URL_DATE_FORMAT); //d = yyyymmdd
$iCalYear = isset($_GET[Calendar::CAL_YEAR])?$_GET[Calendar::CAL_YEAR]:0; //cy = yyyy
$iCalMonth = isset($_GET[Calendar::CAL_MONTH])?$_GET[Calendar::CAL_MONTH]:0; //cm = m
$oMyThougths = new MyThoughts();
$bValidPost = ($sPostToken!='' && $oMyThougths->checkPostToken($sPostToken));
if($bValidPost)
{
if($bRegister)
{
$oMyThougths->register($sLogin, $sPass);
$sPage = 'r';
}
elseif($sLogin!='' && $sPass!='')
{
$oMyThougths->logMeIn($sLogin, $sPass);
}
}
//if loggued in
if(!$oMyThougths->isLogguedIn())
{
$oMyThougths->logonPage($sLogin);
}
else
{
$oMyThougths->activateMenu();
$oMyThougths->setCalendarDate();
switch($sPage)
{
case 'w': //write a thought
if($bValidPost && $sThought!='' && $sThought!='Talk to me.')
{
if($iThoughtId==0)
{
$iThoughtId = $oMyThougths->addThought($sThought);
}
else
{
$oMyThougths->updateThought($iThoughtId, $sThought);
}
}
if($bFinishedWriting)
{
$oMyThougths->readingPage();
}
else
{
$oMyThougths->writingPage($iThoughtId);
}
break;
case 'r': //read a thought (per day)
if($iDay<=0 || !$oMyThougths->readingPage(strtotime($iDay)))
{
$oMyThougths->writingPage();
}
break;
case 's': // go to settings page
if($bValidPost)
{
$asSettings = array_intersect_key($_POST, array_flip($oMyThougths->getSettingsList()));
$oMyThougths->setSettings($asSettings);
$oMyThougths->writingPage();
}
else
{
$oMyThougths->settingsPage();
}
break;
case 'q': //quit
$oMyThougths->logMeOut();
}
if($iCalYear!=0 && $iCalMonth!=0)
{
$oMyThougths->setCalendarDate($iCalYear, $iCalMonth);
}
}
echo $oMyThougths->getPage();
?>

27
mask/calendar.html Executable file
View File

@@ -0,0 +1,27 @@
<div id="calendar">
<table class="calendar_list">
<thead>
<tr>
<th colspan="7">
<a class="calendar_direction" href="#link_prev#">&lt;-</a>&nbsp;
#current_month#
<a class="calendar_direction" href="#link_next#">-&gt;</a>&nbsp;
</th>
</tr>
</thead>
<tbody class="round">
<tr>
<!-- [PART] TITLE [START] -->
<td>#day_name#</td>
<!-- [PART] TITLE [END] -->
</tr>
<!-- [PART] WEEK [START] -->
<tr class="calendar_items">
<!-- [PART] DAY [START] -->
<td class="item_#item_class#" title="#item_link_title#" onclick="goTo('#item_link#');">#item_day#</td>
<!-- [PART] DAY [END] -->
</tr>
<!-- [PART] WEEK [END] -->
</tbody>
</table>
</div>

7
mask/errors.html Executable file
View File

@@ -0,0 +1,7 @@
<div id="errors" class="round_top">
<ul>
<!-- [PART] ERROR [START] -->
<li>#error#</li>
<!-- [PART] ERROR [END] -->
</ul>
</div>

37
mask/index.html Executable file
View File

@@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="Franzz" />
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="functions.js"></script>
<link rel="shortcut icon" href="images/favicon.ico" />
<title>Thoughts &bull; #title#</title>
</head>
<body>
<div id="container">
<div id="header"></div>
<div id="menu">
#menu#
</div>
<div id="main">
#content#
</div>
<div id="footer">
Designed and powered by <a href="mailto:franzz@lutran.fr" title="Send an email">Franzz</a> &amp; <a href="mailto:clarita@lutran.fr" title="Send an email">Clarita</a>.
My Thoughts Project under <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GPLv3</a> License.
</div>
#errors#
</div>
<script type="text/javascript">
for (var i in document.forms)
{
var formName = document.forms[i].name;
if(formName && formName.indexOf('post_') === 0)
{
addInput(formName, 'post_token', 'hidden', '#post_token#');
}
}
</script>
</body>
</html>

20
mask/logon.html Executable file
View File

@@ -0,0 +1,20 @@
<div id="logon">
<form method="post" action="?p=w" name="post_logon">
<div class="credentials">
<p>Nickname -&gt; <input type="text" name="login" id="login" value="#login#" /></p>
<p>Password -&gt; <input type="password" name="pass" id="pass" /></p>
</div>
<p><input type="button" class="register" name="register_link" value="Register?" /></p>
<p><input type="submit" class="connection" value="Ok" /></p>
</form>
</div>
<script type="text/javascript">
function register()
{
addInput('post_logon', 'register', 'hidden', '1');
document.forms['post_logon'].submit();
}
document.forms['post_logon'].elements['register_link'].addEventListener('click', register , false);
document.forms['post_logon'].elements['login'].focus();
</script>

4
mask/menu.html Executable file
View File

@@ -0,0 +1,4 @@
<a id="signout" href="?p=w" title="Exit" class="option">Write</a>&nbsp;.&nbsp;
<a id="signout" href="?p=s" title="Exit" class="option">Settings</a>&nbsp;.&nbsp;
<a id="signout" href="?p=q" title="Exit" class="option">Sign out</a>
#calendar#

14
mask/read_thought.html Executable file
View File

@@ -0,0 +1,14 @@
<p class="date">Thoughts on #date#.</p>
<div class="read round_right">
<!-- [PART] THOUGHT [START] -->
<div class="thought">
<div class="time">At #time#</div>
<div class="paragraphs">
<!-- [PART] THOUGHT_PARA [START] -->
<p>#thought_paragraph#</p>
<!-- [PART] THOUGHT_PARA [END] -->
<p style="text-align:center;text-indent:0;font-family:Comic sans MS;">*&nbsp;*&nbsp;*</p>
</div>
</div>
<!-- [PART] THOUGHT [END] -->
</div>

19
mask/settings.html Executable file
View File

@@ -0,0 +1,19 @@
<div id="settings">
<form method="post" action="?p=s" name="post_settings">
<table>
<!-- [PART] SETTING [START] -->
<tr>
<td>#setting_name#</td>
<td>
<select name="#setting_name#">
<!-- [PART] SETTING_OPTION [START] -->
<option value="#setting_option_value#" #setting_option_selected#>#setting_option_name#</option>
<!-- [PART] SETTING_OPTION [END] -->
</select>
</td>
</tr>
<!-- [PART] SETTING [END] -->
</table>
<input type="submit" value="Ok" />
</form>
</div>

77
mask/write_thought.html Executable file
View File

@@ -0,0 +1,77 @@
<div id="write_thought">
<form id="post_thought" name="post_thought" method="post">
<div class="writing_pad"><textarea name="thoughts" id="thoughts" class="write round_right" style="font-family:#font#;font-size:#size#px;">#thought#</textarea></div>
<div class="save">
<input type="submit" value="Save" title="Ctrl+S" />
<p>#last_saved#</p>
</div>
<input type="hidden" name="thought_id" value="#thought_id#" />
</form>
</div>
<script type="text/javascript">
//pad.value = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi luctus aliquet rhoncus. Vestibulum rutrum massa id risus facilisis vitae venenatis justo mollis. Aenean ornare facilisis dapibus. Sed eget dolor auctor tellus posuere sodales. Cras sodales est ut neque egestas tempus. Praesent facilisis nunc a sem varius nec fringilla eros volutpat. Donec vitae nulla lectus, ac ullamcorper justo. Ut accumsan laoreet eros. Suspendisse non congue eros. Fusce placerat leo quis lorem tincidunt ut ultrices sem auctor. Aenean elit dui, ornare id egestas et, volutpat in nisl. Morbi faucibus turpis id est interdum et lacinia neque posuere. Vivamus rutrum urna ut dolor ultrices ut imperdiet odio placerat. Donec eu dui elit. Sed eu felis sem.\nNunc eu diam auctor nibh laoreet tincidunt. Curabitur laoreet, leo eu lacinia condimentum, sem ipsum fringilla lectus, nec dictum enim est id nibh. Phasellus faucibus, dui cursus semper tempus, nisi est ullamcorper risus, id vulputate nulla odio non leo. Proin placerat iaculis justo quis scelerisque. Quisque vel diam in felis convallis pharetra. Cras consectetur ultrices nibh sit amet tincidunt. Vestibulum ut tortor turpis. Quisque mollis auctor tortor at interdum. Sed id libero est. Fusce ut nibh nec dolor tincidunt lobortis. Ut fermentum lorem quis mauris varius adipiscing eu eu orci. Sed at est quis dolor bibendum placerat. Pellentesque consequat nisi a massa eleifend pharetra. Cras a nibh nunc.\nCras rhoncus, elit eu aliquam tempor, arcu arcu pharetra orci, hendrerit vehicula lacus nulla et est. Quisque elit sapien, commodo nec tempor vehicula, congue sit amet augue. Proin porttitor sodales quam eu pellentesque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla ornare dignissim ultricies. Donec volutpat libero at lacus feugiat vulputate commodo erat semper. Cras eget lacus orci, at sagittis neque. Phasellus nec neque nec turpis faucibus sollicitudin. Ut ac ipsum a justo vehicula hendrerit. Sed nec quam lectus, eu pellentesque erat.\nPraesent sed leo a metus laoreet lobortis. Aenean nec pulvinar tellus. Cras eu nibh sed ipsum mollis pulvinar. Mauris sagittis imperdiet lacus, quis condimentum nunc volutpat id. Nulla ac arcu felis. Sed risus diam, egestas vitae convallis non, laoreet vitae turpis. Aenean neque eros, egestas vitae hendrerit in, pellentesque ut justo. Cras iaculis tincidunt tristique. Quisque et nisi sapien. Thank God, i forgot latin long ago !';
function save()
{
document.forms['post_thought'].submit();
}
var autosave = setTimeout("save();", 60*1000);
//pad sizing
var pad = document.forms['post_thought'].elements['thoughts'];
pad.addEventListener('keyup', function() {setHeight(this);}, false);
setHeight(pad);
pad.focus();
window.scrollTo(0,document.body.scrollHeight);
//Save shortcut
var isCtrl = false;
document.onkeyup = function(e)
{
if(e.which == 17)
{
isCtrl = false;
}
};
document.onkeydown = function(e)
{
if(e.which == 17)
{
isCtrl = true;
}
if(e.which == 83 && isCtrl == true) //Ctrl+S
{
save();
return false;
}
else if(e.which == 78 && isCtrl == true) //CTRL+N
{
return false;
}
};
/*
var tags = ['a', 'td'];
for (j in tags)
{
var links = document.getElementsByTagName(tags[j]);
for( var i = 0, link; link = links[i]; i++ )
{
link.addEventListener('click', function() {checkOnQuit(this);} , false);
}
}
function checkOnQuit(link)
{
var onQuitMsg = 'Are you sure you want to leave this page ? It\'s not saved yet.';
if(!confirm(onQuitMsg))
{
}
}
*/
</script>

365
style.css Executable file
View File

@@ -0,0 +1,365 @@
@CHARSET "ISO-8859-1";
/* Colors
bright brown : #e2ccb2
dark brown : #584127
blue lines : #2DCDFF
red lines : #EC3B45
*/
/* General */
@font-face {
font-family: 'thoughts';
font-style: normal;
font-weight: normal;
src: url('aescrawl.ttf') format('truetype');
}
body {
min-width: 700px;
font-family: thoughts, Arial;
font-size:14px;
background-color:#e2ccb2;
}
table {
border:none;
background:none;
text-align:center;
margin:0;
padding:0;
border-spacing:0;
}
input, textarea {
font-family: thoughts, Arial;
font-size:14px;
}
input[type=button], input[type=submit] {
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
font-weight:bold;
}
p {
margin:0;
padding:0;
}
a:visited, a {
color:black;
}
a:active, a:focus, input:active, input:focus {
outline: none;
}
.round {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px;
}
.round_top {
-moz-border-radius:10px 10px 0 0;
-webkit-border-radius:10px 10px 0 0;
border-radius:10px 10px 0 0;
}
.round_right {
-moz-border-radius:0 10px 10px 0;
-webkit-border-radius:0 10px 10px 0;
border-radius:0 10px 10px 0;
}
button::-moz-focus-inner, input[type="reset"]::-moz-focus-inner, input[type="button"]::-moz-focus-inner, input[type="submit"]::-moz-focus-inner,input[type="file"] > input[type="button"]::-moz-focus-inner {
border: none;
}
/* Container */
#container {
width:700px;
margin:auto;
/*border:1px solid black;*/
}
/* Header */
#header {
margin-left:-100px;
height:203px;
background:url('images/logo.png') 0 0 no-repeat;
}
/* Menu */
#menu {
}
#menu a.option {
display:inline-table;
height:50px;
width:90px;
line-height:50px;
text-align:center;
background: url("images/button_left.png") 0 0 no-repeat,
url("images/button_right.png") 100% 0 no-repeat,
url("images/button_middle.png") 0 0 repeat-x;
text-decoration: none;
}
#menu a.option:hover {
color:white;
background: url("images/button_left_hover.png") 0 0 no-repeat,
url("images/button_right_hover.png") 100% 0 no-repeat,
url("images/button_middle_hover.png") 0 0 repeat-x;
}
/* Calendar */
#calendar {
position:absolute;
margin-top:-40px;
margin-left:560px;
}
table.calendar_list {
/*border:2px solid #584127;*/
background-color:#e2ccb2;
}
table.calendar_list tbody {
display:none;
border:2px solid #584127;
}
table.calendar_list:hover tbody {
display:inline-table;
overflow:visible;
}
table.calendar_list tr.calendar_items td {
background-position:-6px -7px;
background-repeat:no-repeat;
width:37px;
height:42px;
padding-top:2px;
padding-right:3px;
}
table.calendar_list tr th {
width:auto;
text-align:left;
font-size:16px;
/*border-bottom:2px solid #584127;*/
padding-top:2px;
}
table.calendar_list tr td.item_full {
background-image:url('images/minicloud.png');
cursor:pointer;
}
table.calendar_list tr td.item_full:hover {
background-image:url('images/minicloud_hover.png');
color:white;
}
table.calendar_list tr td.item_full:active {
background-image:url('images/minicloud_active.png');
background-position: 53% 53%;
}
table.calendar_list tr td.item_empty {
background-image:url('images/minicloud_disabled.png');
color:#e2ccb2;
font-weight:bold;
}
table.calendar_list tr td.item_disabled {
color:#e2ccb2;
}
a.calendar_direction {
text-decoration:none;
}
/* Main */
#main {
padding-top:30px;
}
/* Log on */
#logon {
position:relative;
margin: 80px auto;
padding-top:40px;
height:225px;
background:url('images/bubble_inverted.png') 135px 0 no-repeat;
text-align:center;
}
#logon div.credentials {
font-size:24px;
text-align:left;
margin:15px auto 0;
padding-left:100px;
width:370px;
}
#logon input {
font-size:24px;
border:none;
background-color:transparent;
}
#logon div.credentials input {
width:130px;
border-bottom:2px dashed black;
height:24px;
}
#logon input.connection {
position:absolute;
left:512px;
top:142px;
font-size:24px;
cursor:pointer;
}
#logon input.register {
margin-top:60px;
}
/* Write Thought */
#write_thought {
text-align:center;
}
div.save {
position:fixed;
top:0;
margin-top:320px;
margin-left:2px; /*page margin*/
width:110px;
background-color:white;
}
div.save input {
border:1px solid #2DCDFF;
background-color:white;
}
div.save p {
color:grey;
font-size:12px;
}
textarea.write, div.read {
border:2px solid #584127;
/*background-color:rgba(255, 255, 255, 0.5);*/
background: url("images/pad_top.gif") 0 0 no-repeat,
url("images/pad_bottom.gif") 0 100% no-repeat,
url("images/pad_line.gif") 0 0 repeat-y;
width:580px;
min-height:300px;
padding:85px 5px 50px 115px;
margin:auto;
overflow:hidden;
}
textarea.write {
font-size:16px;
line-height:20px;
}
input.save:hover {
border-color:#EC3B45;
}
/* Read Thought */
div.read {
position:relative;
padding-bottom:30px;
}
div.thought {
font-size:16px;
line-height:20px;
}
p.date {
font-size:20px;
}
div.time {
position:absolute;
margin-left:-100px;
}
div.paragraphs p {
margin:0 0 20px 0;
}
div.paragraphs p:first-letter {
font-size:59px;
line-height:16px;
margin-right:5px;
font-weight:400;
float:left;
text-transform:uppercase;
}
div.paragraphs p + p, div.paragraphs p + p:first-letter {
font-size:inherit;
line-height:inherit;
margin-right:inherit;
font-weight:normal;
float:none;
text-indent:40px;
}
/* Settings */
#settings table tr td {
text-align:left;
}
/* Footer */
#footer {
text-align:center;
color:grey;
font-size:12px;
}
#footer a {
color:grey;
}
/* Errors */
#errors {
position:fixed;
bottom:-2px;
background-color:white;
width:696px;
border:2px solid red;
}
#errors ul li {
list-style-image: url(images/error.png);
color:red;
font-weight: bold;
font-size:24px;
}
fieldset {
margin:20px auto;
width:90%;
}
fieldset p {
text-align: justify;
}

36
test.php Executable file
View File

@@ -0,0 +1,36 @@
<?php
/* Test on masks
Toughts on #date#.
<!-- [PART] THOUGHT [START] -->
<fieldset id="thought">
<legend>#legend#</legend>
#thought#
</fieldset>
<!-- [PART] THOUGHT [END] -->
BETWEEN THOUGHT1 AND THOUGHT2
<!-- [PART] THOUGHT2 [START] -->
THOUGHT2
<!-- [PART] THOUGHT2.1 [START] -->
THOUGHT2.1
<!-- [PART] THOUGHT2.1.1 [START] -->
THOUGHT2.1.1
<!-- [PART] THOUGHT2.1.1 [END] -->
THOUGHT2.1
<!-- [PART] THOUGHT2.1 [END] -->
BETWEEN THOUGHT2.1 AND THOUGHT2.2
<!-- [PART] THOUGHT2.2 [START] -->
THOUGHT2.2
<!-- [PART] THOUGHT2.2 [END] -->
BETWEEN THOUGHT2.2 AND THOUGHT2.3
<!-- [PART] THOUGHT2.3 [START] -->
THOUGHT2.3
<!-- [PART] THOUGHT2.3 [END] -->
THOUGHT2
<!-- [PART] THOUGHT2 [END] -->
BETWEEN THOUGHT2 AND THOUGHT3
<!-- [PART] THOUGHT3 [START] -->
THOUGHT3
<!-- [PART] THOUGHT3 [END] -->
AFTER THOUGHT3
*/

2
welcome Executable file
View File

@@ -0,0 +1,2 @@
Welcome To MyThoughts Online Application! Hope you'll enjoy the effort. don't hesitate to send feedbacks: francois at lutran dot fr
Hit the "Write" button to start writing your thoughts.