123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- <?php if(!defined('__TYPECHO_ADMIN__')) exit; ?>
- <?php \Typecho\Plugin::factory('admin/write-js.php')->write(); ?>
- <?php \Widget\Metas\Tag\Cloud::alloc('sort=count&desc=1&limit=200')->to($tags); ?>
- <script src="<?php $options->adminStaticUrl('js', 'timepicker.js'); ?>"></script>
- <script src="<?php $options->adminStaticUrl('js', 'tokeninput.js'); ?>"></script>
- <script>
- $(document).ready(function() {
- // 日期时间控件
- $('#date').mask('9999-99-99 99:99').datetimepicker({
- currentText : '<?php _e('现在'); ?>',
- prevText : '<?php _e('上一月'); ?>',
- nextText : '<?php _e('下一月'); ?>',
- monthNames : ['<?php _e('一月'); ?>', '<?php _e('二月'); ?>', '<?php _e('三月'); ?>', '<?php _e('四月'); ?>',
- '<?php _e('五月'); ?>', '<?php _e('六月'); ?>', '<?php _e('七月'); ?>', '<?php _e('八月'); ?>',
- '<?php _e('九月'); ?>', '<?php _e('十月'); ?>', '<?php _e('十一月'); ?>', '<?php _e('十二月'); ?>'],
- dayNames : ['<?php _e('星期日'); ?>', '<?php _e('星期一'); ?>', '<?php _e('星期二'); ?>',
- '<?php _e('星期三'); ?>', '<?php _e('星期四'); ?>', '<?php _e('星期五'); ?>', '<?php _e('星期六'); ?>'],
- dayNamesShort : ['<?php _e('周日'); ?>', '<?php _e('周一'); ?>', '<?php _e('周二'); ?>', '<?php _e('周三'); ?>',
- '<?php _e('周四'); ?>', '<?php _e('周五'); ?>', '<?php _e('周六'); ?>'],
- dayNamesMin : ['<?php _e('日'); ?>', '<?php _e('一'); ?>', '<?php _e('二'); ?>', '<?php _e('三'); ?>',
- '<?php _e('四'); ?>', '<?php _e('五'); ?>', '<?php _e('六'); ?>'],
- closeText : '<?php _e('完成'); ?>',
- timeOnlyTitle : '<?php _e('选择时间'); ?>',
- timeText : '<?php _e('时间'); ?>',
- hourText : '<?php _e('时'); ?>',
- amNames : ['<?php _e('上午'); ?>', 'A'],
- pmNames : ['<?php _e('下午'); ?>', 'P'],
- minuteText : '<?php _e('分'); ?>',
- secondText : '<?php _e('秒'); ?>',
- dateFormat : 'yy-mm-dd',
- timezone : <?php $options->timezone(); ?> / 60,
- hour : (new Date()).getHours(),
- minute : (new Date()).getMinutes()
- });
- // 聚焦
- $('#title').select();
- // text 自动拉伸
- Typecho.editorResize('text', '<?php $security->index('/action/ajax?do=editorResize'); ?>');
- // tag autocomplete 提示
- var tags = $('#tags'), tagsPre = [];
-
- if (tags.length > 0) {
- var items = tags.val().split(','), result = [];
- for (var i = 0; i < items.length; i ++) {
- var tag = items[i];
- if (!tag) {
- continue;
- }
- tagsPre.push({
- id : tag,
- tags : tag
- });
- }
- tags.tokenInput(<?php
- $data = array();
- while ($tags->next()) {
- $data[] = array(
- 'id' => $tags->name,
- 'tags' => $tags->name
- );
- }
- echo json_encode($data);
- ?>, {
- propertyToSearch: 'tags',
- tokenValue : 'tags',
- searchDelay : 0,
- preventDuplicates : true,
- animateDropdown : false,
- hintText : '<?php _e('请输入标签名'); ?>',
- noResultsText : '<?php _e('此标签不存在, 按回车创建'); ?>',
- prePopulate : tagsPre,
- onResult : function (result, query, val) {
- if (!query) {
- return result;
- }
- if (!result) {
- result = [];
- }
- if (!result[0] || result[0]['id'] != query) {
- result.unshift({
- id : val,
- tags : val
- });
- }
- return result.slice(0, 5);
- }
- });
- // tag autocomplete 提示宽度设置
- $('#token-input-tags').focus(function() {
- var t = $('.token-input-dropdown'),
- offset = t.outerWidth() - t.width();
- t.width($('.token-input-list').outerWidth() - offset);
- });
- }
- // 缩略名自适应宽度
- var slug = $('#slug');
- if (slug.length > 0) {
- var wrap = $('<div />').css({
- 'position' : 'relative',
- 'display' : 'inline-block'
- }),
- justifySlug = $('<pre />').css({
- 'display' : 'block',
- 'visibility': 'hidden',
- 'height' : slug.height(),
- 'padding' : '0 2px',
- 'margin' : 0
- }).insertAfter(slug.wrap(wrap).css({
- 'left' : 0,
- 'top' : 0,
- 'minWidth' : '5px',
- 'position' : 'absolute',
- 'width' : '100%'
- })), originalWidth = slug.width();
- function justifySlugWidth() {
- var val = slug.val();
- justifySlug.text(val.length > 0 ? val : ' ');
- }
- slug.bind('input propertychange', justifySlugWidth);
- justifySlugWidth();
- }
- // 原始的插入图片和文件
- Typecho.insertFileToEditor = function (file, url, isImage) {
- var textarea = $('#text'), sel = textarea.getSelection(),
- html = isImage ? '<img src="' + url + '" alt="' + file + '" />'
- : '<a href="' + url + '">' + file + '</a>',
- offset = (sel ? sel.start : 0) + html.length;
- textarea.replaceSelection(html);
- textarea.setSelection(offset, offset);
- };
- var submitted = false, form = $('form[name=write_post],form[name=write_page]').submit(function () {
- submitted = true;
- }), formAction = form.attr('action'),
- idInput = $('input[name=cid]'),
- cid = idInput.val(),
- draft = $('input[name=draft]'),
- draftId = draft.length > 0 ? draft.val() : 0,
- btnSave = $('#btn-save').removeAttr('name').removeAttr('value'),
- btnSubmit = $('#btn-submit').removeAttr('name').removeAttr('value'),
- btnPreview = $('#btn-preview'),
- doAction = $('<input type="hidden" name="do" value="publish" />').appendTo(form),
- locked = false,
- changed = false,
- autoSave = $('<span id="auto-save-message" class="left"></span>').prependTo('.submit'),
- lastSaveTime = null;
- $(':input', form).bind('input change', function (e) {
- var tagName = $(this).prop('tagName');
- if (tagName.match(/(input|textarea)/i) && e.type == 'change') {
- return;
- }
- changed = true;
- });
- form.bind('field', function () {
- changed = true;
- });
- // 发送保存请求
- function saveData(cb) {
- function callback(o) {
- lastSaveTime = o.time;
- cid = o.cid;
- draftId = o.draftId;
- idInput.val(cid);
- autoSave.text('<?php _e('已保存'); ?>' + ' (' + o.time + ')').effect('highlight', 1000);
- locked = false;
- btnSave.removeAttr('disabled');
- btnPreview.removeAttr('disabled');
- if (!!cb) {
- cb(o)
- }
- }
- changed = false;
- btnSave.attr('disabled', 'disabled');
- btnPreview.attr('disabled', 'disabled');
- autoSave.text('<?php _e('正在保存'); ?>');
- if (typeof FormData !== 'undefined') {
- var data = new FormData(form.get(0));
- data.append('do', 'save');
- $.ajax({
- url: formAction,
- processData: false,
- contentType: false,
- type: 'POST',
- data: data,
- success: callback
- });
- } else {
- var data = form.serialize() + '&do=save';
- $.post(formAction, data, callback, 'json');
- }
- }
- // 计算夏令时偏移
- var dstOffset = (function () {
- var d = new Date(),
- jan = new Date(d.getFullYear(), 0, 1),
- jul = new Date(d.getFullYear(), 6, 1),
- stdOffset = Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
- return stdOffset - d.getTimezoneOffset();
- })();
-
- if (dstOffset > 0) {
- $('<input name="dst" type="hidden" />').appendTo(form).val(dstOffset);
- }
- // 时区
- $('<input name="timezone" type="hidden" />').appendTo(form).val(- (new Date).getTimezoneOffset() * 60);
- // 自动保存
- <?php if ($options->autoSave): ?>
- var autoSaveOnce = !!cid;
- function autoSaveListener () {
- setInterval(function () {
- if (changed && !locked) {
- locked = true;
- saveData();
- }
- }, 10000);
- }
- if (autoSaveOnce) {
- autoSaveListener();
- }
- $('#text').bind('input propertychange', function () {
- if (!locked) {
- autoSave.text('<?php _e('尚未保存'); ?>' + (lastSaveTime ? ' (<?php _e('上次保存时间'); ?>: ' + lastSaveTime + ')' : ''));
- }
- if (!autoSaveOnce) {
- autoSaveOnce = true;
- autoSaveListener();
- }
- });
- <?php endif; ?>
- // 自动检测离开页
- $(window).bind('beforeunload', function () {
- if (changed && !submitted) {
- return '<?php _e('内容已经改变尚未保存, 您确认要离开此页面吗?'); ?>';
- }
- });
- // 预览功能
- var isFullScreen = false;
- function previewData(cid) {
- isFullScreen = $(document.body).hasClass('fullscreen');
- $(document.body).addClass('fullscreen preview');
- var frame = $('<iframe frameborder="0" class="preview-frame preview-loading"></iframe>')
- .attr('src', './preview.php?cid=' + cid)
- .attr('sandbox', 'allow-same-origin allow-scripts')
- .appendTo(document.body);
- frame.load(function () {
- frame.removeClass('preview-loading');
- });
- frame.height($(window).height() - 53);
- }
- function cancelPreview() {
- if (submitted) {
- return;
- }
- if (!isFullScreen) {
- $(document.body).removeClass('fullscreen');
- }
- $(document.body).removeClass('preview');
- $('.preview-frame').remove();
- };
- $('#btn-cancel-preview').click(cancelPreview);
- $(window).bind('message', function (e) {
- if (e.originalEvent.data == 'cancelPreview') {
- cancelPreview();
- }
- });
- btnPreview.click(function () {
- if (changed) {
- locked = true;
- if (confirm('<?php _e('修改后的内容需要保存后才能预览, 是否保存?'); ?>')) {
- saveData(function (o) {
- previewData(o.draftId);
- });
- } else {
- locked = false;
- }
- } else if (!!draftId) {
- previewData(draftId);
- } else if (!!cid) {
- previewData(cid);
- }
- });
- btnSave.click(function () {
- doAction.attr('value', 'save');
- });
- btnSubmit.click(function () {
- doAction.attr('value', 'publish');
- });
- // 控制选项和附件的切换
- var fileUploadInit = false;
- $('#edit-secondary .typecho-option-tabs li').click(function() {
- $('#edit-secondary .typecho-option-tabs li').removeClass('active');
- $(this).addClass('active');
- $(this).parents('#edit-secondary').find('.tab-content').addClass('hidden');
-
- var selected_tab = $(this).find('a').attr('href'),
- selected_el = $(selected_tab).removeClass('hidden');
- if (!fileUploadInit) {
- selected_el.trigger('init');
- fileUploadInit = true;
- }
- return false;
- });
- // 高级选项控制
- $('#advance-panel-btn').click(function() {
- $('#advance-panel').toggle();
- return false;
- });
- // 自动隐藏密码框
- $('#visibility').change(function () {
- var val = $(this).val(), password = $('#post-password');
- if ('password' == val) {
- password.removeClass('hidden');
- } else {
- password.addClass('hidden');
- }
- });
-
- // 草稿删除确认
- $('.edit-draft-notice a').click(function () {
- if (confirm('<?php _e('您确认要删除这份草稿吗?'); ?>')) {
- window.location.href = $(this).attr('href');
- }
- return false;
- });
- });
- </script>
|