设置名字和头部信息

This commit is contained in:
kekee000 2014-10-10 16:47:39 +08:00
parent 069e408f50
commit 8aa5c9772c
9 changed files with 99 additions and 27 deletions

View File

@ -41,7 +41,7 @@ define(
upFile.addEventListener('change', onUpFileChange);
ajaxBinaryFile({
url: '../font/baiduHealth.ttf',
url: '../test/baiduHealth.ttf',
onSuccess: function(binaryData) {
var ttfReader = new ttfreader();
var ttfData = ttfReader.read(binaryData);

View File

@ -102,6 +102,7 @@ define(
* @return {string} 字符串
*/
pad: function(str, size, ch) {
str = String(str);
if(str.length > size) {
return str.slice(str.length - size);
}

View File

@ -15,7 +15,7 @@ define(
+ '<input data-field="fontFamily" type="text" class="form-control">'
+ '</div>'
+ '<div class="input-group input-group-sm">'
+ '<span class="input-group-addon">字体家族</span>'
+ '<span class="input-group-addon">字体家族</span>'
+ '<input data-field="fontSubFamily" type="text" class="form-control">'
+ '</div>'
+ '<div class="input-group input-group-sm">'
@ -29,34 +29,36 @@ define(
+ '<div class="input-group input-group-sm">'
+ '<span class="input-group-addon">PostScript名称</span>'
+ '<input data-field="postScriptName" type="text" class="form-control">'
+ '</div>'
+ '<div class="input-group input-group-sm">'
+ '<span class="input-group-addon">em框大小</span>'
+ '<input data-field="unitsPerEm" type="number" min="64" max="16384" class="form-control" placeholder="1024~16384">'
+ '</div>'
+ '<div class="input-group input-group-sm">'
+ '<span class="input-group-addon">最小可读尺寸</span>'
+ '<input data-field="lowestRecPPEM" type="number" min="8" max="16384" class="form-control" placeholder="8~16384">'
+ '</div>'
+ '<div class="input-group input-group-sm">'
+ '<span class="input-group-addon">创建日期</span>'
+ '<input data-field="created" type="datetime-local" class="form-control">'
+ '</div>';
return require('./setting').derive({
title: '命名信息',
title: '字体信息',
getTpl: function() {
return tpl;
},
set: function(setting) {
this.getDialog().find('[data-field]').each(function(i, item) {
item = $(item);
item.val(setting[item.attr('data-field')] || '');
});
this.setFields(setting);
},
validate: function() {
var name = {};
this.getDialog().find('[data-field]').each(function(i, item) {
item = $(item);
var val = item.val().trim();
if (val) {
name[item.attr('data-field')] = val;
}
});
return name;
var setting = this.getFields();
return setting;
}
});

View File

@ -11,6 +11,7 @@ define(
function(require) {
var lang = require('common/lang');
var observable = require('common/observable');
var pad = require('common/string').pad;
/**
* 设置框函数
@ -91,6 +92,21 @@ define(
if (item.type == 'checkbox') {
item.checked = setting[item.getAttribute('data-field')] ? 'checked' : '';
}
else if (item.type == 'datetime-local') {
var val = setting[item.getAttribute('data-field')];
var date;
if (typeof(val) === 'string') {
date = new Date(Date.parse(val));
}
else if(/^\d+$/.test(val)) {
date = new Date(+val);
}
else {
date = val;
}
item.value = date.getFullYear() + '-' + pad(date.getMonth() + 1, 2) + '-' + pad(date.getDate(), 2)
+ 'T' + pad(date.getHours(), 2) + ':' + pad(date.getMinutes(), 2);
}
else {
item = $(item);
item.val(setting[item.attr('data-field')]);
@ -113,11 +129,26 @@ define(
setting[item.getAttribute('data-field')] = true;
}
}
else if (item.type == 'datetime-local') {
if (item.value) {
setting[item.getAttribute('data-field')] = Date.parse(item.value.replace('T', ' '));
}
}
else if (item.type == 'number') {
if (item.value) {
var val = +item.value;
if (item.getAttribute('data-ceil')) {
val = Math.floor(val);
}
setting[item.getAttribute('data-field')] = val;
}
}
else {
item = $(item);
var val = item.val().trim();
if (val) {
setting[item.attr('data-field')] = item.attr('data-ceil') ? Math.floor(val) : +val ;
setting[item.attr('data-field')] = val;
}
}
});

View File

@ -25,8 +25,8 @@ define(
var setting = {
'unicode': require('../dialog/setting-unicode'),
'name': require('../dialog/setting-name'),
'adjust-pos': require('../dialog/setting-adjust-pos'),
'adjust-glyf': require('../dialog/setting-adjust-glyf'),
//'adjust-pos': require('../dialog/setting-adjust-pos'),
//'adjust-glyf': require('../dialog/setting-adjust-glyf'),
'online': require('../dialog/font-online')
}
@ -152,10 +152,10 @@ define(
if (ttf) {
var dlg = new setting.name({
onChange: function(setting) {
program.ttfmanager.setName(setting);
program.ttfmanager.setInfo(setting);
}
});
dlg.show(ttf.name);
dlg.show($.extend({}, ttf.head, ttf.name));
}
},

View File

@ -234,11 +234,21 @@ define(
};
/**
* 撤销
* 设置名字和头部信息
* @return {this}
*/
Manager.prototype.setName = function(name) {
this.ttf.setName(name);
Manager.prototype.setInfo = function(info) {
var changed = false;
if (this.ttf.get().head.unitsPerEm != info.unitsPerEm) {
changed = true;
}
this.ttf.setName(info);
this.ttf.setHead(info);
if (changed) {
this.fireChange(false);
}
return this;
};

View File

@ -430,6 +430,26 @@ define(
return this.ttf.name;
};
/**
* 设置head信息
*
* @return {Object} 头对象
*/
TTF.prototype.setHead = function(head) {
if (head) {
// unitsperem
if (head.unitsPerEm && head.unitsPerEm >= 64 && head.unitsPerEm <= 16384) {
this.ttf.head.unitsPerEm = head.unitsPerEm;
}
// lowestrecppem
if (head.lowestRecPPEM && head.lowestRecPPEM >= 8 && head.lowestRecPPEM <= 16384) {
this.ttf.head.lowestRecPPEM = head.lowestRecPPEM;
} }
return this.ttf.head;
};
return TTF;
}
);

View File

@ -47,6 +47,11 @@ define(
// 重置校验码
ttf.head.checkSumAdjustment = 0;
ttf.head.magickNumber = 0x5F0F3CF5;
if (typeof(ttf.head.created) == 'string') {
ttf.head.created = /^\d+$/.test(ttf.head.created) ? +ttf.head.created : Date.parse(ttf.head.created);
}
ttf.head.created = Date.now();
ttf.head.modified = Date.now();
// 将glyf的代码点按小到大排序
ttf.glyf.forEach(function(glyf) {

View File

@ -260,12 +260,15 @@ define(
var delta = -2077545600000; // new Date(1970, 1, 1).getTime() - new Date(1904, 1, 1).getTime();
if (typeof value === 'undefined') {
if (typeof(value) === 'undefined') {
value = delta;
}
else if (typeof value.getTime === 'function') {
else if (typeof(value.getTime) === 'function') {
value = value.getTime();
}
else if (/^\d+$/.test(value)){
value = +value;
}
else {
value = Date.parse(value);
}