Skip to content

Commit

Permalink
version 2.3
Browse files Browse the repository at this point in the history
2.3-----2019/01/24
1.修复数字0不能作密码的问题
2.新增笔记后缀跳转
3.[B421]新增B421主题并设为默认(如果您不喜欢,请在lib/config中将B421改为default即可)
4.[B421]简易适配并优化,提高翻译亲切性(如果您不喜欢,请在lib/config中将B421改为default即可)
5.修复读取地址时出现的乱码问题
6.修复访问开启分享页面时手机端无法下拉的问题
  • Loading branch information
2613df committed Jan 24, 2019
1 parent 11145c5 commit 67af279
Show file tree
Hide file tree
Showing 16 changed files with 630 additions and 70 deletions.
15 changes: 14 additions & 1 deletion .htaccess
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@

RewriteEngine On

RewriteRule ^share/([^.]+)$ share.php?f=$1 [QSA,PT,L]


#RewriteRule ^([a-zA-Z0-9_@^+(){},/~`]+)$ index.php?f=$1


RewriteRule ^([^.]+)$ index.php?f=$1 [QSA,PT,L]
#RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?f=$1 [QSA,PT,L]



#RewriteRule ^/?([a-zA-Z0-9]+)$ index.php?f=$1

ErrorDocument 404 /
ErrorDocument 403 /
ErrorDocument 403 /
268 changes: 268 additions & 0 deletions assets/js/jquery.textarea.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
/*
* Tabby jQuery plugin version 0.12
*
* Ted Devito - http://teddevito.com/demos/textarea.html
*
* Copyright (c) 2009 Ted Devito
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/

// create closure

(function($) {

// plugin definition

$.fn.tabby = function(options) {
//debug(this);
// build main options before element iteration
var opts = $.extend({}, $.fn.tabby.defaults, options);
var pressed = $.fn.tabby.pressed;

// iterate and reformat each matched element
return this.each(function() {
$this = $(this);

// build element specific options
var options = $.meta ? $.extend({}, opts, $this.data()) : opts;

$this.bind('keydown',function (e) {
var kc = $.fn.tabby.catch_kc(e);
if (16 == kc) pressed.shft = true;
/*
because both CTRL+TAB and ALT+TAB default to an event (changing tab/window) that
will prevent js from capturing the keyup event, we'll set a timer on releasing them.
*/
if (17 == kc) {pressed.ctrl = true; setTimeout("$.fn.tabby.pressed.ctrl = false;",1000);}
if (18 == kc) {pressed.alt = true; setTimeout("$.fn.tabby.pressed.alt = false;",1000);}

if (9 == kc && !pressed.ctrl && !pressed.alt) {
e.preventDefault; // does not work in O9.63 ??
pressed.last = kc; setTimeout("$.fn.tabby.pressed.last = null;",0);
process_keypress ($(e.target).get(0), pressed.shft, options);
return false;
}

}).bind('keyup',function (e) {
if (16 == $.fn.tabby.catch_kc(e)) pressed.shft = false;
}).bind('blur',function (e) { // workaround for Opera -- http://www.webdeveloper.com/forum/showthread.php?p=806588
if (9 == pressed.last) $(e.target).one('focus',function (e) {pressed.last = null;}).get(0).focus();
});

});
};

// define and expose any extra methods
$.fn.tabby.catch_kc = function(e) { return e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which; };
$.fn.tabby.pressed = {shft : false, ctrl : false, alt : false, last: null};

// private function for debugging
function debug($obj) {
if (window.console && window.console.log)
window.console.log('textarea count: ' + $obj.size());
};

function process_keypress (o,shft,options) {
var scrollTo = o.scrollTop;
//var tabString = String.fromCharCode(9);

// gecko; o.setSelectionRange is only available when the text box has focus
if (o.setSelectionRange) gecko_tab (o, shft, options);

// ie; document.selection is always available
else if (document.selection) ie_tab (o, shft, options);

o.scrollTop = scrollTo;
}

// plugin defaults
$.fn.tabby.defaults = {tabString : String.fromCharCode(9)};

function gecko_tab (o, shft, options) {
var ss = o.selectionStart;
var es = o.selectionEnd;

// when there's no selection and we're just working with the caret, we'll add/remove the tabs at the caret, providing more control
if(ss == es) {
// SHIFT+TAB
if (shft) {
// check to the left of the caret first
if (ss-options.tabString == o.value.substring(ss-options.tabString.length, ss)) {
o.value = o.value.substring(0, ss-options.tabString.length) + o.value.substring(ss); // put it back together omitting one character to the left
o.focus();
o.setSelectionRange(ss - options.tabString.length, ss - options.tabString.length);
}
// then check to the right of the caret
else if (ss-options.tabString == o.value.substring(ss, ss + options.tabString.length)) {
o.value = o.value.substring(0, ss) + o.value.substring(ss + options.tabString.length); // put it back together omitting one character to the right
o.focus();
o.setSelectionRange(ss,ss);
}
}
// TAB
else {
o.value = o.value.substring(0, ss) + options.tabString + o.value.substring(ss);
o.focus();
o.setSelectionRange(ss + options.tabString.length, ss + options.tabString.length);
}
}
// selections will always add/remove tabs from the start of the line
else {
while (ss < o.value.length && o.value.charAt(ss).match(/[ \t]/)) ss++;
// split the textarea up into lines and figure out which lines are included in the selection
var lines = o.value.split("\n");
var indices = new Array();
var sl = 0; // start of the line
var el = 0; // end of the line
var sel = false;
for (var i in lines) {
el = sl + lines[i].length;
indices.push({start: sl, end: el, selected: (sl <= ss && el > ss) || (el >= es && sl < es) || (sl > ss && el < es)});
sl = el + 1;// for "\n"
}

// walk through the array of lines (indices) and add tabs where appropriate
var modifier = 0;
for (var i in indices) {
if (indices[i].selected) {
var pos = indices[i].start + modifier; // adjust for tabs already inserted/removed
// SHIFT+TAB
if (shft && options.tabString == o.value.substring(pos,pos+options.tabString.length)) { // only SHIFT+TAB if there's a tab at the start of the line
o.value = o.value.substring(0,pos) + o.value.substring(pos + options.tabString.length); // omit the tabstring to the right
modifier -= options.tabString.length;
}
// TAB
else if (!shft) {
o.value = o.value.substring(0,pos) + options.tabString + o.value.substring(pos); // insert the tabstring
modifier += options.tabString.length;
}
}
}
o.focus();
var ns = ss + ((modifier > 0) ? options.tabString.length : (modifier < 0) ? -options.tabString.length : 0);
var ne = es + modifier;
o.setSelectionRange(ns,ne);
}
}

function ie_tab (o, shft, options) {
var range = document.selection.createRange();

if (o == range.parentElement()) {
// when there's no selection and we're just working with the caret, we'll add/remove the tabs at the caret, providing more control
if ('' == range.text) {
// SHIFT+TAB
if (shft) {
var bookmark = range.getBookmark();
//first try to the left by moving opening up our empty range to the left
range.moveStart('character', -options.tabString.length);
if (options.tabString == range.text) {
range.text = '';
} else {
// if that didn't work then reset the range and try opening it to the right
range.moveToBookmark(bookmark);
range.moveEnd('character', options.tabString.length);
if (options.tabString == range.text)
range.text = '';
}
// move the pointer to the start of them empty range and select it
range.collapse(true);
range.select();
}

else {
// very simple here. just insert the tab into the range and put the pointer at the end
range.text = options.tabString;
range.collapse(false);
range.select();
}
}
// selections will always add/remove tabs from the start of the line
else {

var selection_text = range.text;
var selection_len = selection_text.length;
var selection_arr = selection_text.split("\r\n");

var before_range = document.body.createTextRange();
before_range.moveToElementText(o);
before_range.setEndPoint("EndToStart", range);
var before_text = before_range.text;
var before_arr = before_text.split("\r\n");
var before_len = before_text.length; // - before_arr.length + 1;

var after_range = document.body.createTextRange();
after_range.moveToElementText(o);
after_range.setEndPoint("StartToEnd", range);
var after_text = after_range.text; // we can accurately calculate distance to the end because we're not worried about MSIE trimming a \r\n

var end_range = document.body.createTextRange();
end_range.moveToElementText(o);
end_range.setEndPoint("StartToEnd", before_range);
var end_text = end_range.text; // we can accurately calculate distance to the end because we're not worried about MSIE trimming a \r\n

var check_html = $(o).html();
$("#r3").text(before_len + " + " + selection_len + " + " + after_text.length + " = " + check_html.length);
if((before_len + end_text.length) < check_html.length) {
before_arr.push("");
before_len += 2; // for the \r\n that was trimmed
if (shft && options.tabString == selection_arr[0].substring(0,options.tabString.length))
selection_arr[0] = selection_arr[0].substring(options.tabString.length);
else if (!shft) selection_arr[0] = options.tabString + selection_arr[0];
} else {
if (shft && options.tabString == before_arr[before_arr.length-1].substring(0,options.tabString.length))
before_arr[before_arr.length-1] = before_arr[before_arr.length-1].substring(options.tabString.length);
else if (!shft) before_arr[before_arr.length-1] = options.tabString + before_arr[before_arr.length-1];
}

for (var i = 1; i < selection_arr.length; i++) {
if (shft && options.tabString == selection_arr[i].substring(0,options.tabString.length))
selection_arr[i] = selection_arr[i].substring(options.tabString.length);
else if (!shft) selection_arr[i] = options.tabString + selection_arr[i];
}

if (1 == before_arr.length && 0 == before_len) {
if (shft && options.tabString == selection_arr[0].substring(0,options.tabString.length))
selection_arr[0] = selection_arr[0].substring(options.tabString.length);
else if (!shft) selection_arr[0] = options.tabString + selection_arr[0];
}

if ((before_len + selection_len + after_text.length) < check_html.length) {
selection_arr.push("");
selection_len += 2; // for the \r\n that was trimmed
}

before_range.text = before_arr.join("\r\n");
range.text = selection_arr.join("\r\n");

var new_range = document.body.createTextRange();
new_range.moveToElementText(o);

if (0 < before_len) new_range.setEndPoint("StartToEnd", before_range);
else new_range.setEndPoint("StartToStart", before_range);
new_range.setEndPoint("EndToEnd", range);

new_range.select();

}
}
}

// end of closure
})(jQuery);
24 changes: 24 additions & 0 deletions assets/js/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
$(function() {
var $textarea = $(".content");
var content = $textarea.val();

// Use jQuery Tabby Plugin to enable the tab key on textareas.
$textarea.tabby();

// Make content available to print.
$(".print").text(content);

$textarea.focus();

// If content changes, update it.
setInterval(function() {
if (content !== $textarea.val()) {
content = $textarea.val();
$.ajax({
type: "POST",
data: "&t=" + encodeURIComponent(content)
});
$(".print").text(content);
}
}, 1000);
});
1 change: 1 addition & 0 deletions content/templates/B421/assets/css/main.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

41 changes: 41 additions & 0 deletions content/templates/B421/footer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php ($visit) ? ("") : (header('location: /'));?>
<div id="controls">
<span>试试在别处上打开 <?php echo $URL."/".$isShareFolder.$name;?></span>
<?php
if(!$do and !$readOnly){//底部按钮
$confirm="javascript:if(confirm('重置笔记将会使当前笔记内容丢失,并同时分配一个新的笔记地址,请确认您知道这么做的后果!')){location='/'}";
echo '<br><div class="btn-group">
<a href="javascript:void(0)" class="btn btn-light" onclick="history.go(0)">刷新</a>
<a href="'.$confirm.'" class="btn btn-danger">重置</a>
<form name="form9" method="post" action="/'.$name.'" style="display:inline">
<INPUT TYPE="hidden" name="setpw" value="1" />
<button TYPE="submit" class="btn btn-success" >设定密码</button>
</form>
<form name="form10" method="post" action="/'.$name.'" style="display:inline">
<INPUT TYPE="hidden" name="share" value="1" />
<button TYPE="submit" class="btn btn-warning">获取只读页面</button>
</form></div>';
}
if($readOnly){
echo '<br><form name="form11" method="post" action="/share/'.$name.'" style="display:inline">
<INPUT TYPE="hidden" name="share" value="0" />
<INPUT TYPE="submit" name="" value ="关闭共享权限" class="btn btn-warning" >
</form>';

}
?>
</div>



<!--备用的BootStrap JS 3.4以及Jquery 1.11.1地址
<script src="/<?php echo $templateFolder."assets/js/jquery.min.js";?>"></script>
<script src="/<?php echo $templateFolder."assets/js/bootstrap.min.js";?>"></script>
-->
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
<script src="/assets/js/jquery.textarea.js"></script>
<script src="/assets/js/script.js"></script>
</body>
</html>
Loading

0 comments on commit 67af279

Please sign in to comment.