MediaWiki:Gadget-requestWizard.js
Chú ý: Sau khi lưu trang, có thể bạn sẽ phải xóa bộ nhớ đệm của trình duyệt để xem các thay đổi.
- Firefox / Safari: Nhấn giữ phím Shift trong khi nhấn Tải lại (Reload), hoặc nhấn tổ hợp Ctrl-F5 hay Ctrl-R (⌘R trên Mac)
- Google Chrome: Nhấn tổ hợp Ctrl-Shift-R (⇧⌘R trên Mac)
- Internet Explorer / Edge: Nhấn giữ phím Ctrl trong khi nhấn Làm tươi (Refresh), hoặc nhấn tổ hợp Ctrl-F5
- Opera: Nhấn tổ hợp Ctrl-F5.
mw.loader.using(["oojs-ui-widgets", "oojs-ui-core"], function() {
/**
* DROPDOWN-WIDGET
* Menu thả xuống chọn khu vực sách (Sách wiki hoặc Sách trẻ em)
* Menu thả xuống chọn kiểu sách
**/
var bookNamespace = new OO.ui.DropdownWidget({
label: 'Chọn khu vực sách',
classes: ['booknamespace'],
indicator: 'down',
menu: {
items: [
new OO.ui.MenuOptionWidget({
data: 'wikibook',
label: 'Sách wiki'
}),
new OO.ui.MenuOptionWidget({
data: 'wikijunior',
label: 'Sách trẻ em'
})
]
}
})
var bookType = new OO.ui.DropdownWidget({
label: 'Chọn kiểu sách',
indicator: 'down'
})
var wikibookType = [
new OO.ui.MenuOptionWidget({
data: 'textbook',
label: 'Sách giáo khoa'
}),
new OO.ui.MenuOptionWidget({
data: 'guideline',
label: 'Cẩm nang hướng dẫn'
}),
new OO.ui.MenuOptionWidget({
data: 'document',
label: 'Sách tài liệu'
}),
new OO.ui.MenuOptionWidget({
data: 'encyclopedia',
label: 'Bách khoa tri thức'
})
]
var wikijuniorType = [
new OO.ui.MenuOptionWidget({
data: '1',
label: 'Thế giới quanh ta'
}),
new OO.ui.MenuOptionWidget({
data: '2',
label: 'Khám phá thiên nhiên'
}),
new OO.ui.MenuOptionWidget({
data: '3',
label: 'Học đếm'
}),
new OO.ui.MenuOptionWidget({
data: '4',
label: 'Bách khoa tri thức'
})
]
bookNamespace.on('labelChange', function(){
// Set label mặc định cho bookType
// Lấy menu bookType => Xóa hết => Thay bằng cái mới theo 2 trường hợp
if (bookNamespace.label == "Sách wiki") {
bookType.setLabel("Chọn kiểu sách wiki")
bookType.getMenu().clearItems().addItems(wikibookType)
} else {
bookType.setLabel("Chọn kiểu sách trẻ em")
bookType.getMenu().clearItems().addItems(wikijuniorType)
}
})
var bookArea = new OO.ui.Widget({
content: [
new OO.ui.HorizontalLayout({
items: [
bookNamespace,
bookType
]
})
]
})
/**
* Chọn tiêu đề sách
**/
var bookTitle = new OO.ui.TextInputWidget({
placeholder: 'Chọn tiêu đề phù hợp với cuốn sách',
indicator: 'require'
})
/**
* Menu chọn chủ đề của sách
**/
var bookCategory = new OO.ui.TagMultiselectWidget({
placeholder: 'Tối đa 10 từ khóa',
tagLimit: 10,
allowArbitrary: true,
indicator: 'require'
})
/**
* Mô tả nội dung cuốn sách
**/
var bookDesc = new OO.ui.MultilineTextInputWidget({
indicator: 'require',
placeholder: 'Ghi vào đây nội dung của cuốn sách',
rows: 5
})
/**
* Ước lượng số trang sách
**/
var pageEstimate = new OO.ui.DropdownWidget({
indicator: 'down',
label: 'Ước lượng số trang sách định viết',
menu: {
items: [
new OO.ui.MenuOptionWidget({
data: '1',
label: 'Duy nhất một trang'
}),
new OO.ui.MenuOptionWidget({
data: '10',
label: 'Số trang đếm trên đầu ngón tay'
}),
new OO.ui.MenuOptionWidget({
data: '100',
label: 'Vài chục trang'
}),
new OO.ui.MenuOptionWidget({
data: '1000',
label: 'Vài trăm trang'
}),
new OO.ui.MenuOptionWidget({
data: '5000',
label: 'Hơn một nghìn trang'
}),
new OO.ui.MenuOptionWidget({
data: '10000',
label: 'Vài nghìn trang'
})
]
}
})
/**
* Ước lượng thời gian hoàn thành
**/
var timeEstimate = new OO.ui.DropdownWidget({
indicator: 'down',
label: 'Ước lượng thời gian hoàn thành sách',
menu: {
items: [
new OO.ui.MenuOptionWidget({
data: '1',
label: 'Khoảng một ngày'
}),
new OO.ui.MenuOptionWidget({
data: '7',
label: 'Khoảng một tuần'
}),
new OO.ui.MenuOptionWidget({
data: '30',
label: 'Khoảng một tháng'
}),
new OO.ui.MenuOptionWidget({
data: '90',
label: 'Khoảng một quý'
}),
new OO.ui.MenuOptionWidget({
data: '180',
label: 'Tầm nửa năm'
}),
new OO.ui.MenuOptionWidget({
data: '365',
label: 'Khoảng 1 năm'
}),
new OO.ui.MenuOptionWidget({
data: '1000',
label: 'Khoảng vài năm'
})
]
}
})
/**
* Các chương, các phần của sách
*
**/
var chapterList = []
var bookChapter = new OO.ui.FieldsetLayout({
items: []
})
/**
* Widget nhập vào các chương, các phần của sách
**/
var chapterInput = new OO.ui.TextInputWidget({
value: 'Chương 1: '
})
chapterInput.on('enter', function() {
chapterList.push(chapterInput.value)
bookChapter.addItems([
new OO.ui.LabelWidget({
label: chapterInput.value,
classes: ['book-chapter']
})
])
setTimeout(function() {
chapterInput.setValue('Chương ' + (chapterList.length + 1) + ': ')
}, 1)
})
/**
* Nút bấm xác nhận đề xuất ý tưởng
*
**/
var confirmButton = new OO.ui.ButtonWidget({
label: 'Đăng ý tưởng',
flags: [
'primary',
'progressive'
]
})
confirmButton.on('click', function(){
// Xử lý tên mục
var headerPrefix = (bookNamespace.label == "Sách trẻ em") ? "Sách trẻ em: " : "Sách: ",
header = headerPrefix + bookTitle.value
// Thu nhặt từ khóa
var allKeys = '',
keyTags = bookCategory.getValue()
for (var i = 0 ; i < keyTags.length ; i++) {
allKeys += keyTags[i]
if (i + 1 < keyTags.length) allKeys += ', '
}
// Các chương
var allChapters = (chapterList.length > 0) ? '* Nội dung con:\n' : ''
for (var x = 0 ; x < chapterList.length ; x++) {
allChapters = allChapters + '** ' + chapterList[x] + '\n'
}
// Thiết lập nội dung
var message = "''Người đề xuất ý tưởng:'' ~" + '~~\n'
+ '=== Thông tin về sách ===\n'
+ '* Loại sách: ' + bookNamespace.label + ' (' + bookType.label + ').\n'
+ '* Tiêu đề sách: ' + bookTitle.value + '.\n'
+ '* Từ khóa sách: ' + allKeys + '.\n'
+ '=== Nội dung sách ===\n'
+ '* Mô tả về sách: ' + bookDesc.value +'\n'
+ allChapters
+ '=== Công việc biên tập ===\n'
+ '* Ước lượng số trang: ' + pageEstimate.label + '.\n'
+ '* Uớc lượng thời gian thực hiện: ' + timeEstimate.label + '.\n'
+ '=== Ý kiến và nhận xét ===\n'
var logic = bookNamespace.label !== "Chọn khu vực sách" &&
bookType.label !== "Chọn kiểu sách" &&
bookType.label !== "Chọn kiểu sách wiki" &&
bookType.label !== "Chọn kiểu sách trẻ em" &&
bookTitle.value !== "" &&
bookCategory.getValue().length > 0 &&
bookDesc.value !== "" &&
pageEstimate.label !== "Ước lượng số trang sách định viết" &&
timeEstimate.label !== "Ước lượng thời gian hoàn thành sách"
// Thông báo xác nhận chắc chắc => Thực hiện thêm đề mục => Tải lại trang
if (logic) {
OO.ui.confirm("Bạn chắc chắn muốn đăng ý tưởng này chứ ?").done( function (confirmed) {
if (confirmed) {
new mw.Api().newSection("Wikibooks:Tòa soạn", header, message)
OO.ui.alert("Đăng ý tưởng thành công !").done(function(){ location.reload() })
}
})
} else {
new OO.ui.alert( 'Bạn chưa điền đầy đủ thông tin kìa !' )
}
})
/**
* FIELDSET-LAYOUT
* NƠI CHỨA TOÀN BỘ THÀNH PHẦN CỦA 'TRÌNH ĐỀ XUẤT Ý TƯỞNG SÁCH'
*
**/
var requestWizard = new OO.ui.FieldsetLayout({
label: 'Đề xuất ý tưởng sách',
classes: ['book-request']
})
requestWizard.addItems([
new OO.ui.FieldLayout(bookArea, {
label: 'Khu vực sách',
align: 'top'
}),
new OO.ui.FieldLayout(bookTitle, {
label: 'Tiêu đề sách',
align: 'top'
}),
new OO.ui.FieldLayout(bookCategory, {
label: 'Từ khóa',
align: 'top',
help: 'Ghi vào đây bất kỳ từ khóa nào liên quan đến sách. Tối đa 10 từ khóa.'
}),
new OO.ui.FieldLayout(pageEstimate, {
label: 'Uớc lượng số trang sách',
align: 'top'
}),
new OO.ui.FieldLayout(timeEstimate, {
label: 'Uớc lượng thời gian thực hiện',
align: 'top'
}),
new OO.ui.FieldLayout(bookDesc, {
label: 'Mô tả về nội dung sách',
align: 'top'
}),
new OO.ui.FieldLayout(
new OO.ui.Widget({
content: [bookChapter]
}),
{
label: 'Các chương sách (Nhấn enter để thêm)',
align: 'top'
}
),
new OO.ui.FieldLayout(chapterInput, {
align: 'top'
}),
new OO.ui.FieldLayout(confirmButton, {
align: 'top'
})
])
$('.request-wizard.special-tool').append(requestWizard.$element)
})